2 回答
不负相思意
TA贡献1777条经验 获得超10个赞
对 list 和 vector 来说,它们的 erase 函数会返回下一个迭代器,因此在遍历时,只需要 it = c.erase(it); 即可。
对 map 和 set 来说,它们的 erase 函数返回的 void,而在进行 erase 之后,当前迭代器会失效,无法再用于获取下一个迭代器。因此需要 erase 之前就获取指向下一个元素的迭代器。如:
tmpIt = it; ++it; c.erase(tmpIt);
利用后缀++操作符的特性(先创建副本,然后再递增迭代器,然后返回副本)上面的三行代码可以简化为一行:
c.erase(it++);
list 正向遍历删除元素示例(vector 用法相同):
// erase with iterator
list<int>::iterator it;
for (it = l.begin(); it != l.end();)
{
if (0 == (*it) % 2) {
it = l.erase(it);
}
else {
++it;
}
}
map 正向遍历删除元素示例(set 用法相同):
// erase with iterator
map<int, int>::iterator mit;
for (mit = m.begin(); mit != m.end();)
{
if (0 == mit->first % 2) {
m.erase(mit++);
}
else {
++mit;
}
}
- 2 回答
- 0 关注
- 749 浏览
添加回答
举报
0/150
提交
取消