【发布时间】:2014-10-18 17:23:49
【问题描述】:
我一直在寻找一种在迭代时擦除向量中某些元素的智能方法,结果发现了this question。
当然,它对我不起作用,因为 C++98 没有 lambda。查找 remove_if 信息并找到 this at cppreference。这就是我的代码的样子:
#include <algorithm>
#include <vector>
bool isOutageValid(const Outage& outage){
return outage.getEndTime() >= 0;
}
std::vector<Outage> outages;
// Some stuff to fill the vector
outages.erase(std::remove_if(outages.begin(), outages.end(), isOutageValid));
for(vector<Outage>::iterator o=outages.begin(); o!=outages.end(); o++){
std::cout << o->getStartTime() << " " << o->getEndTime() << std::endl;
}
我正在调试一个向量,其中有 4 个中断,我知道第一个是无效的,其余的都是有效的。执行擦除后,向量大小为3,所以看起来还可以。但是,如果我使用 for 循环来检查向量中的 3 个中断,则第二个已被删除,而不是第一个。
我什至调试了 isOutageValid 方法,它是第一个返回 false 的唯一方法。有没有我遗漏的错误?
【问题讨论】:
-
你的意思是 outages.begin(),对吧?