我写这个小代码只是为了看看迭代器实际上是如何失效的,并且在达到其容量后不指向向量的更改位置。
这里向量和容量的大小最初都是 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