您的位置:首页 > 其它

遍历list或map时删除元素(较巧妙)

2013-10-22 19:08 387 查看
#include <iostream>
#include <list>
#include <map>

using namespace std;

int main()
{
std::list<int> test_list;
test_list.push_back(1);
test_list.push_back(2);
test_list.push_back(3);
test_list.push_back(4);
test_list.push_back(5);
test_list.push_back(6);

cout << "*****************delete list***************" << endl;
std::list<int>::iterator iter = test_list.begin();
for(iter ; iter != test_list.end();)
{
if(*iter % 2 == 0)
{
test_list.erase(iter++);
}else ++iter;
}

for(iter = test_list.begin(); iter != test_list.end(); ++ iter)
{
cout << *iter << " ";
}
cout << endl;

cout << "*****************delete map****************" << endl;
std::map<int, int> test_map;
test_map[1] = 1;
test_map[2] = 2;
test_map[3] = 3;
test_map[4] = 4;
test_map[5] = 5;
test_map[6] = 6;
std::map<int, int>::iterator t_iter = test_map.begin();
for(t_iter; t_iter != test_map.end(); )
{
if(t_iter->second % 2 == 0)
{
test_map.erase(t_iter++);
}else ++ t_iter;
}

for(t_iter = test_map.begin(); t_iter != test_map.end(); ++ t_iter)
{
cout << t_iter->second << " ";
}
cout << endl;

system("pause");
return 0;
}
比较巧妙的点就在于 test_list.erase(iter++); test_map.erase(t_iter++); 利用后置自增操作符,传给erase函数的iterator是指向当前元素,而在这条语句之后,iter 自增,从而指向下一个元素,而不会导致因当前iterator删除而不能正确访问下一个元素的问题。

运行结果

*****************delete list***************
1 3 5
*****************delete map****************
1 3 5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: