预期输出为:1 2 3 4,如果我们取消注释提到的执行推回操作的行并运行代码,预期输出仍然是 1 2 3 4。但猜猜它完全不同。运行一下你就知道了。为什么会发生这种情况?
#include <iostream>
#include<vector>
using namespace std;
int main()
{
int k=2;
vector<int> v;
vector<int> :: iterator itr;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(6);
v.push_back(7);
auto a=v.begin();
for(int i=0;i<4;i++){
cout<<*a<<" ";
//v.push_back(anynumber); ----------------------------------->This line
a++;
}
return 0;
}
在循环中修改
v
会使您创建的迭代器 a
无效,从而导致未定义的行为。
push_back
功能:
如果操作后新的 size() 大于旧的capacity(),则会发生重新分配,在这种情况下,所有迭代器(包括 end() 迭代器)和对元素的所有引用都将无效。否则只有 end() 迭代器无效。