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

den*_*tic -3 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;
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么会这样; 我猜测find_if算法的第三个参数是一个const值.但那不应该影响我vector1,对吧?

我使用嵌套的远程for循环,它完美地工作.但是,我想尝试使用这个find_if算法......

Log*_*uff 5

捕获/传递值/引用时遇到问题.

它应该是- [&]或者[&v1]- 值捕获的变量mutable默认为非,而lambda operator()const.您可以使用mutable关键字来修复错误,这会产生operator()非错误const,但您无法看到所做的更改v1.

另外,你应该路过Vector2 const& v2,auto const&或者auto &&为了避免复制.

一起:

[&v1](Vector2 const& v2) { ... }
Run Code Online (Sandbox Code Playgroud)

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

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