我有两个主要包含字符串的类向量,我试图跟踪两个向量之间匹配的次数。我在一个公共类中保留了一个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
算法...
答案 0 :(得分:5)
您在捕获/传递值/参考时遇到问题。
应为[&]
或[&v1]
- 按值捕获的变量默认为非mutable
,而lambda operator()
为const
。 You could use the mutable
keyword修正了错误,导致operator()
非const
,但您无法看到对v1
所做的更改。
此外,为了避免复制,您应该经过Vector2 const& v2
,auto const&
或auto &&
。
合:
[&v1](Vector2 const& v2) { ... }
我想尝试使用这个
find_if
算法......
但这不是它的用途。如果您不打算使用返回的迭代器,请不要这样做。你应该收到警告。使用循环进行简单迭代。