【发布时间】:2018-10-09 07:19:48
【问题描述】:
我有一个向量,我正在其中搜索一个元素,同时使用 for-each 循环遍历该向量。如果在搜索过程中发现任何无效元素,我想将它们从向量中删除。
基本上,我想做这样的事情:
for (auto el : vec) {
if (el == whatImLookingFor) {
return el;
} else if (isInvalid(el)) {
vec.erase(el);
}
}
我查看了一些其他问题,例如 this 和 this,但都建议使用 std::remove_if。这将遍历整个向量并删除所有无效元素,而不是仅在找到我要查找的元素之前进行迭代,然后忽略之后的任何元素。
什么是这样做的好方法?
【问题讨论】:
-
你不需要迭代器作为std::vector<T>::erase() 的参数吗???
-
您链接到的 first question 在顶部有一个代码 sn-p 这基本上是您想要的 - 只需插入检查元素是否是您想要的元素,如果是 @987654328 @.
-
如果要修改基础范围,Range-for 通常不是正确的工具。
-
找不到元素返回什么?
-
另见std::vector iterator invalidation。它可能是重复的,因为它处理由
erase引起的无效迭代器。