2010-12-13 38 views
15

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

+2

Avez-vous un code vous pourriez montrer? La dernière ligne de votre question me confond vraiment – Default

+2

Oui, il semble que vous ayez fait une erreur dans votre code. Vous ne devriez probablement pas avoir à réserver manuellement l'espace – Oystein

Répondre

38

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. 
+1

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

+1

@swegi, par par défaut, oui. 'resize()' peut aussi prendre un second argument qui sera copié dans tous les nouveaux éléments. –

+1

Mais, si vous n'utilisez que '.push_back()', est-ce que vous devez réallouer/redimensionner? – Charles

7

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;