この小さなコードを書いたのは、イテレータが実際に無効になり、容量に達した後にベクトルの変更された場所を指していないことを確認するためだけです。
ここで vector と capacity のサイズは両方とも最初は 5 です。その後、他のいくつかの要素を vector に挿入し、イテレータを を指すように再初期化しませんmyvector.begin()
。これにより、ベクターの要素を再度印刷49
した後、出力にジャンク値が表示されます。maximum size of vector is : 1073741823
myvector.begin()
私の質問は、すべての要素が新しい場所にコピーされた後、C++ がポイント イテレータを再度有効にしないのはなぜですか?
これにより、デバッグが困難な動作が発生する可能性もあります。安全な作業方法は、イテレータを使用する直前に常に再初期化することです。
#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
int main()
{
vector<int> myvector;
vector<int>::iterator it;
int myarray[]= {100,200,300,400};
myvector.insert(it,500);
it=myvector.begin();
myvector.insert(it,myarray,myarray+4);
it=myvector.begin();
for(;it!=myvector.end();++it)
cout <<*it<<endl;
cout <<"size of vector is :" << myvector.size() <<"\n";
cout <<"capacity of vector is : " << myvector.capacity()<<"\n";
cout <<"maximum size of vector is : " << myvector.max_size()<<"\n";
myvector.push_back(600);
for(;it!=myvector.end();++it)
cout <<*it<<endl;
}
Output of program :-
100
200
300
400
500
size of vector is :5
capacity of vector is : 5
maximum size of vector is : 1073741823
49
100
200
300
400
500
600