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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.