2011-12-18 6 views
4

vector::pop_back()の動作を理解しようとしています。だから私は、コードスニペットを次ていますpop_back()、C++について混乱しています

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

は、多分それは正しいですが、それはそれはだから私は混乱しています1を出力していることを私に驚き。 pop_back()は、要素を削除できるのはindex > 0ですか?

ありがとうございます!

+0

ベクトルが空であるとは思わない場合は、常に 'cout << test.size()<< endl;でテストできます。 – Gravity

答えて

18

空のベクター上でfrontを呼び出して、未定義の動作を呼び出しています。これは、配列の境界からの索引付けのようなものです。 1を返すなど、何かが起こる可能性があります。

10

pop_backここでは、ベクターは空のままです。空のベクトルのfront()にアクセスすると、の未定義の動作になります。これは何かが起こる可能性があることを意味します。それはクラッシュする可能性があり、1を返し、42を返し、「こんにちは、世界!」と表示し、ハードドライブを消去するか、summon demons through your nasal passagesと表示されます。 C++に関する限り、これらのいずれも受け入れ可能なアクションです。ここではが起きてが起きて、1が返されます。それに頼らないでください。