agrandir la taille du vecteur passé en mémoire
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.
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.