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迭代器失效的两种情况的主要内容,如果未能解决你的问题,请参考以下文章

vector迭代器失效的两种情况

C++ 迭代器失效

vector之二(迭代器失效与解决)

vector之二(迭代器失效与解决)

vector之二(迭代器失效与解决)

vector迭代器失效的几种情况