我有两个主要包含字符串的类向量,我试图跟踪两个向量之间匹配的次数.我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算法......
捕获/传递值/引用时遇到问题.
它应该是- [&]或者[&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算法代替......
但这不是它的用途.如果您不打算使用返回的迭代器,请不要这样做.你应该收到警告.使用循环进行简单迭代.