您的位置:首页 > 其它

STL中vector iterators imcompatible报错

2015-12-27 17:08 260 查看
利用C++中的标准模板库实现删除一个vector中特定值的元素。报错。初始代码如下:

#include<iostream>

#include<vector>

using namespace std;

void print(vector<int>);

int main()

{

vector<int> array;

array.push_back(1);

array.push_back(6);

array.push_back(6);

array.push_back(3);

array.push_back(4);

vector<int>::iterator itor;

for(itor=array.begin();itor!=array.end();)

{

if(6==*itor)

{

array.erase(itor);

}

else

{

itor++;

}

}

print(array);

return 0;



}

void print(vector<int> v)

{

cout<<"\n vector size is:"<<v.size()<<endl;

vector<int>::iterator x;

for(x=v.begin();x!=v.end();++x)

{

cout<<*x<<" ";

}

}

解决方法:将array.erase(itor)改成itor=array.erase(itor);就好了。原来STL中所有容器类中的erase都会返回一个迭代器,这个迭代器指向了当前删除元素的下一个元素。而迭代器的地址不变。除非执行itor++操作。

改完后程序输出1 3 4.将{1,6,6,3,4}中的6全部删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: