2011-12-18 5 views
4

J'essaie de comprendre le comportement de vector::pop_back(). Je l'ai extrait de code suivant:Confus au sujet de pop_back(), C++

vector<int> test; 
test.push_back(1); 
test.pop_back(); 
cout << test.front() << endl; 

Peut-être qu'il est juste, mais il me surprend qu'il imprime 1. Je suis confus. Est-ce que pop_back() seulement capable d'enlever l'élément a index > 0?

Merci d'avance!

+0

Si vous n'êtes pas convaincu que le vecteur est vide (il l'est), vous pouvez toujours tester en utilisant 'cout << test.size() << endl;' – Gravity

Répondre

18

Vous appelez un comportement indéfini en appelant front sur un vecteur vide. C'est comme indexer hors des limites d'un tableau. Tout peut arriver, y compris renvoyer 1.

10

pop_back laisse le vecteur vide. L'accès à un vecteur vide front() est comportement indéfini. Cela signifie que tout peut arriver - il n'y a pas de prédiction de quoi. Il pourrait tomber en panne, il pourrait retourner 1, il pourrait revenir 42, il pourrait imprimer "Bonjour, monde!", Il pourrait effacer votre disque dur, ou il pourrait summon demons through your nasal passages. N'importe lequel d'entre eux sont des actions acceptables, en ce qui concerne C++ - ici vient de se produire pour finir par retourner 1. Ne comptez pas dessus.