为了账号安全,请及时绑定邮箱和手机立即绑定

如何在遍历中使用 iterator/reverse

如何在遍历中使用 iterator/reverse

红颜莎娜 2019-03-02 03:03:35
如何在遍历中使用 iterator/reverse
查看完整描述

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;
}
}



查看完整回答
反对 回复 2019-03-09
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

你这里的d.next()得到的是object类型,而100是int类型,这里会出现异常。你可以把iterator加上泛型iterator试试看

查看完整回答
反对 回复 2019-03-09
  • 2 回答
  • 0 关注
  • 749 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信