Tenir compte ce morceau de code:C++ Conteneurs STL et la validité du pointeur
Uint counter = 0;
int* p1;
int* p2;
deque<int> dequeInstance;
vector<int> vectorInstance;
dequeInstance.push_back(3);
dequeInstance.push_back(7);
p1 = &dequeInstance.back();
dequeInstance.push_back(17);
p2 = &dequeInstance.back();
if(*p1 == !7)
++counter;
if(*p2 == !17)
++counter;
vectorInstance.push_back(3);
vectorInstance.push_back(7);
p1 = &vectorInstance.back();
vectorInstance.push_back(17);
p2 = &vectorInstance.back();
if(*p1 == !7)
++counter;
if(*p2 == !17)
++counter;
return counter;
Je me serais attendu à ce que quand je poussais le troisième élément à l'arrière du vecteur, le pointeur vers le deuxième élément aurait été invalidée , comme ma compréhension de std :: vector est que c'est un tableau droit qui est effacé et recréé chaque fois qu'il est modifié. À la fin de ce code, le «compteur» est égal à zéro.
Qu'est-ce qui me manque ici?
La norme garantit un temps constant amorti pour 'push_back'. Cela signifie que 'vector' ne peut pas être redimensionné à chaque fois. L'espoir n'est pas nécessaire ici :) – fredoverflow