如何在 int 类型的向量中使用 lambda
How can I use lambda in vector of type int?
我有一个向量:
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
。
此外,如果graphPred
是 empty()
,没有什么可以擦除的,所以你需要在你的 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()
相关文章:
- 如何修改 lambda 内部字符串的向量
- 使用多个输入向量中值的笛卡尔乘积调用 lambda
- 具有 lambda 函数的函数向量
- 我正在尝试找到一个特定的结构成员,该成员是使用 lambda 函数的结构向量
- 插入向量时,使用lambda的返回而不是函数的返回是否有意义?
- 在使用 std::sort() 和 lambda 函数按属性对 ADT 的向量进行排序时遇到问题
- 列出生成器(lambda的向量)会导致通过引用捕获的非常奇怪的行为
- 在为工作线程访问 lambda 中捕获的向量列表中的元素引用时,是否需要互斥锁?
- parallel_for lambda 函数填充 2D 向量后出错
- 在lambda中捕获各种向量使元素const
- 使用lambda函数将向量与另一个向量进行分类
- 采用向量中包含的唯一指针的 Lambda 表达式
- 为什么在重载的 ostream 运算符中引用 lambda 中的向量会导致错误
- 在编写 lambda 函数向量时出现隔离错误
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- C++11 使用 lambda 排序向量来跟踪索引
- 如果返回了向量的一个项,lambda表达式的返回类型是什么
- 在 lambda 函数中传入 >1 向量的方法C++
- C++对不带lambda的索引向量进行排序
- 对具有 lambda 谓词的向量进行部分排序