insert扩容以后
vector容器当中已有数据,在insert之前获取的迭代器(auto e = v.beign())在insert之后vector已经扩容了(将原来的内容复制到其他地址去),之前的迭代器地址已经失效。
`
int main()
{
vector<int> v = {100, 200 ,300 ,400 ,500};
auto e = v.begin();
v.insert(b.end(), 700);
//e = v.begin();
for(e;e != v.end();e++)
{
cout << *e << " ";
}
}
`
上述代码会出现错误,去掉注释正确了。
erase以后
对于下述代码
vector<int> v = {100, 200 ,300, 400};
vector<int>::iterator it;
for(it = v.begin();it != v.end();it++)
{
if(*it == 300)
{
v.erase(it);
}
}
for(it = v.begin();it != v.end();it++)
{
cout << *it << " ";
}
在MacOS上运行没有任何问题
但是在Windows上运行这段代码会崩溃。
正确的写法应该是it = v.erase(it);,erase以后返回下一个迭代器。