c++ - C++98 中的 std::remove_if 用法

标签 c++ vector c++98

我一直在寻找一种在迭代时删除 vector 中某些元素的聪明方法,并找到了 this question .

当然,它对我不起作用,因为 C++98 没有 lambda。查找 remove_if 信息并找到 this at cppreferenc e.这就是我的代码的样子:

#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 次中断调试到一个 vector 中,我知道第一个是无效的,其余的是有效的。执行删除后, vector 大小为3,所以看起来没问题。但是,如果我使用 for 循环进行迭代以检查 vector 中的 3 个中断,则第二个已被删除,而不是第一个。

我什至调试了 isOutageValid 方法,它是第一个唯一返回 false 的方法。我遗漏了什么错误吗?

最佳答案

应该是:

outages.erase(std::remove_if(outages.begin, outages.end(), isNotOutageValid), outages.end());

目前,您分区中断首先无效,最后有效(换句话说,您的谓词是倒置的)。
然后删除第一个有效元素(而不是范围)。

关于c++ - C++98 中的 std::remove_if 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25487965/

相关文章:

c++ - 如何将焦点设置在特定的小部件上

c++ - 从基指针/引用调用正确的自由函数

c++ - 实例化类时是否实例化了类模板的成员?

c++ - 从函数指针静态推断标准 C++98 中的函数类型参数

c++ - 宏变量参数

c++ - 如何在 GUI 窗口中使用 WinApi (GDI) 在 C++ 中设置鼠标单击像素?

c++ - 如何从 vector 中的指向对象的指针列表中调用对象方法?

python - 我将如何创建一个可以用 x 和 y 或以度为单位的角度初始化的二维矢量对象?

c++ - std::vector.size() 不工作

c++ - 用自身的拷贝交换 vector