Initialisation et allocation vector par son constructeur
Bonjour,
J'ai un soucis avec l'allocation d'un vector.
En fait, je n'arrive pas à comprendre pourquoi les exemples suivants ne sont pas équivalents:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| //Exemple 1:
std::vector<double> v1;
v1.reserve(5); // edit: v1.resize(5);
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
std::vector<double> v2 = std::vector<double>(v1.size(), 0.0);
v2[v2.size()-1] = 3.14; // !!! seg fault |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| //Exemple 2:
std::vector<double> v1;
v1.reserve(5); // edit: v1.resize(5);
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
std::vector<double> v2;
v2.resize(v1.size, 0.0);
v2[v2.size()-1] = 3.14; // OK |
Sachant que dans l'Exemple 1 on aura une seg fault (out of range) si on veut accéder au dernier élément du vector (à savoir v2[4]) et pas dans l'Exemple 2.
Pourtant, je vérifie les caractéristiques du vector v2 qui indiquent: size =5 et capacity = 5.
Je ne comprends absolument pas pourquoi.