2010-12-13 17 views
15

¿Alguien me puede dar un ejemplo de cómo asignar memoria para un vector? Un par de líneas es todo lo que necesito. Tengo un vector que lleva en 20-30 elementos .. pero cuando intento a cout y compilarlo solo me dan el primer par de entradas ..Asignar memoria para un vector

+2

¿Tiene alguna código que podría mostrar? La última línea de tu pregunta realmente me confunde – Default

+2

Sí, parece que has cometido un error en tu código. Probablemente no debería tener que reservar espacio manualmente – Oystein

Respuesta

38

Un std::vector gestiona su propia memoria. Se pueden utilizar los métodos reserve() y resize() a haber que asignar memoria suficiente para adaptarse a una determinada cantidad de artículos:

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

para completar esta publicación, 'resize()' agrega elementos construidos con su constructor predeterminado (es decir, si el tipo es 'Elem', luego' Elem() ') – swegi

+1

@swegi, por por defecto, sí. 'resize()' también puede tomar un segundo argumento que se copiará en todos los elementos nuevos. –

+1

Pero, si solo está usando '.push_back()', ¿tiene que reasignar/cambiar el tamaño? – Charles

7

Tome un vistazo a this Se utiliza list.reserve (norte);

Vector cuida su memoria, y realmente no necesita usar reserve() en absoluto. Es solo una mejora en el rendimiento si ya sabes qué tan grande debe ser la lista de vectores.

Por ejemplo:

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; 
Cuestiones relacionadas