您的位置:首页 > 其它

STL迭代器失效问题记录

2012-11-14 20:58 357 查看
/*
根据<stl源码剖析>书中所述,map和list相同的某些性质,当客户端对她进行元素新增操作或删除操作时,
操作的所有迭代器,在操作完成之后依然有效,但让,被删除的那个元素的迭代器必然是个例外。
而vector的迭代器在删除的时候,会返回指向下一个内容的指针,但是对vector的任何操作,一旦引起空
间重新配置,指向原来的vector的所有迭代器都将失效了。这是程序员容易犯的一个错误。
*/
#include <map>
#include <vector>
#include <iostream>
using namespace std;

int main()
{
map<int, int> obj_m;
vector<int>   obj_v(3);

obj_v[0] = 2;
obj_v[1] = 3;
obj_v[2] = 4;

obj_m[1] = 2;
obj_m[2] = 3;
obj_m[3] = 4;

/*
map的erase返回操作为void类型
std::map::erase
<map>
void erase ( iterator position );
size_type erase ( const key_type& x );
void erase ( iterator first, iterator last );

*/
map<int,int>::iterator iter = obj_m.begin();
while(iter != obj_m.end())
{
obj_m.erase(iter++);
}

/*
vector的erase返回值为迭代器
std::vector::erase
<vector>
iterator erase ( iterator position );
iterator erase ( iterator first, iterator last );
*/
vector<int>::iterator iter_v = obj_v.begin();
for(; iter_v != obj_v.end();)
{
iter_v = obj_v.erase(iter_v);
}

cout<<obj_m.size()<<endl;
cout<<obj_v.size()<<endl;

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: