如何在 int 类型的向量中使用 lambda

How can I use lambda in vector of type int?

本文关键字:lambda 向量 int 类型      更新时间:2023-10-16

我有一个向量:

std::vector<int> graphPred(tot_lines);

设置为各种值,但是当输入完成后,我想消除我尝试过的空单元格:

graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(),
                [](const int graphPred){return graphPred.empty();}),
            graphPred.end());

但是编译器抱怨"表达式必须是类类型"我的语法是否有问题或其他实现目标的方法?

"yes they are 0"

所以使用这个:

  graphPred.erase(std::remove_if(graphPred.begin(), graphPred.end(),
                    [](const int x){return x==0;}),
                graphPred.end());

您的 lambda 函数

[](const int graphPred){return graphPred.empty();}

int上使用empty,这是错误的,成员函数在类上调用,这就是错误的全部内容

你写的东西没有意义:const int graphPred"阴影"外面的graphPred(无论如何都不会被捕获,因为方括号是空的)。它在触发您看到的错误int上调用empty

此外,如果graphPredempty() ,没有什么可以擦除的,所以你需要在你的 lambda 中有一个有意义的逻辑表达式。

这应该有效 - 它将从向量中删除所有偶数:

graphPred.erase(
    std::remove_if(
        graphPred.begin()
    ,   graphPred.end()
    ,   [](const int n){return n % 2 == 0;}
    )
,   graphPred.end()
);

这是关于 ideone 的演示。

您将lambda定义为:

[](const int graphPred){return graphPred.empty();}

所以graphPred是一个常量 int 而不是一个类。你不能计算graphPred.empty()