vector cambio de tamaño comportamiento extraño

tengo el siguiente código. La parte interesante es que si elimino el comentario de resize () en el vector, se muestran 10 números para un valor de entrada de 5. Estoy usando eclipse con mingw y gcc en Windows XP. ¿No debería el iterador ir solo para 5 elementos?

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
//#include "stdio.h"
using namespace std;

template <typename T>
void print_coll(T t)
{
    typename T::iterator iter = t.begin();
    while (iter != t.end() )
    {
        cout << *iter << " ";
        ++iter;
    }
    cout << endl;
}

int main()
{
    int size;
    cin >> size;
    vector<int> numbers;
//    numbers.resize(size);

    for ( int i = 0 ; i < size; ++i ) {
        int r = (rand() % 10);
        numbers.push_back(r);
    }
    print_coll(numbers);

}

preguntado el 16 de mayo de 11 a las 17:05

2 Respuestas

resize cambia el tamaño del vector, insertando valores predeterminados para cada uno de los elementos que necesita crear para el nuevo tamaño. Quieres reserve.

contestado el 16 de mayo de 11 a las 21:05

@Kiran, no es tonto en absoluto: siempre tengo que detenerme y revisarme cuando quiero reserve. Nombres similares, funciones similares siempre causarán confusión. - Mark Ransom

numbers.resize(size);

Esto agrega size 0 al vector.

for ( int i = 0 ; i < size; ++i ) {
    int r = (rand() % 10);
    numbers.push_back(r);
}

Y esto agrega size valores aleatorios al vector.

Probablemente querías reserve no es resize. reserve no cambia el tamaño "visible" del vector, solo cambia el tamaño interno del almacenamiento utilizado por el vector, resize sin embargo cambia el tamaño "visible".

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.