私のセットアップでこれを実行します:
vector<int> myvector;
for (int i=1; i<=5; i++) myvector.insert(myvector.end(),i);
vector<int>::iterator it;
for ( it=myvector.begin() ; it < myvector.end()+2; it++ )
cout << " " << *it;
収量:
1 2 3 4 5 0 0
範囲外のイテレータを逆参照しようとすると、セグメンテーション違反が発生すると思いました。しかし、ベクターに含まれているタイプの空またはデフォルトで初期化されたオブジェクトを生成するようです。
これは明確に定義された動作ですか?そして、このプロパティはどこから、イテレータから、またはベクトルから来ますか?イテレータは、ある意味で範囲外の例外をキャッチし、代わりに空のオブジェクトを返しますか?
これをC++11リファレンスで見つけてみましたが、少し頭がおかしいようです。