Question

Je passe mon vecteur à une fonction qui attend un tableau c. Il retourne la quantité de données qu'il a remplie (similaire à fread). Y at-il un moyen que je peux dire à mon vecteur de changer sa taille pour inclure le montant que la fonction a transmis?

bien sûr, je m'assure que le vecteur a la capacité () de contenir cette quantité de données.

Était-ce utile?

La solution

Non, il n'y a pas de moyen supporté pour " développer " un vecteur de sorte qu'il contienne des valeurs supplémentaires qui ont été directement copiées. Utilisation de "capacité" Allouer une mémoire non-dimensionnée à laquelle vous pouvez écrire n’est absolument pas une chose sur laquelle vous devriez compter.

Assurez-vous que votre vecteur dispose de la quantité d’espace requise en le redimensionnant avant d’appeler la fonction, puis en le redimensionnant à la valeur correcte. Ex.

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);

Autres conseils

capacity indique uniquement la quantité de mémoire réservée, mais il ne s'agit pas de la taille du vecteur.

Ce que vous devez faire est d’abord redimensionner à la taille maximale requise:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);

hmm ..
vector.resize (size);
?

std :: vector a une méthode resize () avec la nouvelle taille comme paramètre. Il suffit donc de l'appeler avec le numéro renvoyé par votre fonction.

std :: back_inserter pourrait être ce dont vous avez besoin. En supposant que votre fonction de saisie puisse fonctionner avec un itérateur, transmettez-la std :: back_inserter (myvector) . Cela va push_back tout ce qui est écrit pour l'itérateur et redimensionner implicitement le vecteur si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top