vector迭代器失效的两种情况
Posted 顾文繁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vector迭代器失效的两种情况相关的知识,希望对你有一定的参考价值。
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以后返回下一个迭代器。
以上是关于vector迭代器失效的两种情况的主要内容,如果未能解决你的问题,请参考以下文章