error:使用find_if时,expression必须是可修改的左值

时间:2016-08-27 18:25:05

标签: c++ lambda

我有两个主要包含字符串的类向量,我试图跟踪两个向量之间匹配的次数。我在一个公共类中保留了一个int计数器(另一个函数需要)。但是,std::find_if似乎不允许我修改或分配此计数器变量。

以下是std::find_if搜索算法:

for (Vector1& v1 : vector1) {
    auto res = find_if(vector2.begin(), vector2.end(),
        [=](Vector2 v2) {
            if (v2.code == v1.code) {
                v1.counter++; // <-- where the error occurs
                return true;
            }
            else
                return false;
        }
    );
}

我似乎无法弄清楚为什么会发生这种情况;我猜测find_if算法的第三个参数是const值。但这不应该影响我的vector1,对吧?

我使用了嵌套的ranged for-loop,它完美地运行。但是,我想尝试使用此find_if算法...

1 个答案:

答案 0 :(得分:5)

您在捕获/传递值/参考时遇到问题。

应为[&][&v1] - 按值捕获的变量默认为非mutable,而lambda operator()constYou could use the mutable keyword修正了错误,导致operator()const,但您无法看到对v1所做的更改。

此外,为了避免复制,您应该经过Vector2 const& v2auto const&auto &&

合:

[&v1](Vector2 const& v2) { ... }
  

我想尝试使用这个find_if算法......

但这不是它的用途。如果您不打算使用返回的迭代器,请不要这样做。你应该收到警告。使用循环进行简单迭代。