Est-ce que quelqu'un peut me donner un exemple d'allocation de mémoire pour un vecteur? Un couple de lignes est tout ce dont j'ai besoin. J'ai un vecteur qui prend en 20-30 éléments .. mais quand je tente de compiler et cout Je ne reçois que les deux premières entrées ..Allouer de la mémoire à un vecteur
Répondre
Un std::vector gère sa propre mémoire. Vous pouvez utiliser les méthodes reserve() et resize() de l'avoir allouer suffisamment de mémoire pour s'adapter à une quantité d'articles:
std::vector<int> vec1;
vec1.reserve(30); // Allocate space for 30 items, but vec1 is still empty.
std::vector<int> vec2;
vec2.resize(30); // Allocate space for 30 items, and vec2 now contains 30 items.
pour compléter ce post, 'resize()' ajoute des éléments construits avec leur constructeur par défaut (ie si le type est 'Elem', alors' Elem() ') – swegi
@swegi, par par défaut, oui. 'resize()' peut aussi prendre un second argument qui sera copié dans tous les nouveaux éléments. –
Mais, si vous n'utilisez que '.push_back()', est-ce que vous devez réallouer/redimensionner? – Charles
Jetez un oeil à this Vous utilisez list.reserve (n);
Vector prend soin de sa mémoire, et vous ne devriez pas vraiment avoir besoin d'utiliser reserve(). Ce n'est vraiment qu'une amélioration des performances si vous connaissez déjà la taille de la liste des vecteurs.
Par exemple:
std::vector<int> v;
v.reserve(110); // Not required, but improves initial loading performance
// Fill it with data
for(int n=0;n < 100; n++)
v.push_back(n);
// Display the data
std::vector<int>::iterator it;
for(it = v.begin(); it != v.end(); ++it)
cout << *it;
Avez-vous un code vous pourriez montrer? La dernière ligne de votre question me confond vraiment – Default
Oui, il semble que vous ayez fait une erreur dans votre code. Vous ne devriez probablement pas avoir à réserver manuellement l'espace – Oystein