如何在遍历中使用 iterator/reverse

如何在遍历中使用 iterator/reverse


红颜莎娜
浏览 750回答 2
2回答

不负相思意

对 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 iteratorlist<int>::iterator it;for (it = l.begin(); it != l.end();){if (0 == (*it) % 2) {it = l.erase(it);}else {++it;}}map 正向遍历删除元素示例(set 用法相同):// erase with iteratormap<int, int>::iterator mit;for (mit = m.begin(); mit != m.end();){if (0 == mit->first % 2) {m.erase(mit++);}else {++mit;}}

饮歌长啸

你这里的d.next()得到的是object类型,而100是int类型,这里会出现异常。你可以把iterator加上泛型iterator试试看
打开App,查看更多内容
随时随地看视频慕课网APP