所以我有一个矢量像这样的矢量:
vector<vector<int>> vec;
我正在尝试使用比较器(pred)迭代vec中的向量,并确定哪些向量通过remove_if和erase删除。到目前为止,我的代码如下:
vector<vector<int>> deleted_vecs;
vec.erase(remove_if(vec.begin(), vec.end(),
([vec, pred](vector<int> x) {
if (pred(x)) {
return true;
}
else {
deleted_vecs.push_back(x);
return false;
}
},
vec.end())));
我在做语法方面有什么问题吗?
我的编译器错误在线上&#34; if(pred(x))&#34;和&#34; deleted_vecs.push_back(x);&#34;并说没有匹配函数调用pred和push_back,虽然我的谓词专门用于接收向量,我已将deleted_vecs声明为向量&gt;。 这让我觉得这是我如何宣布x的问题,但我不确定。
任何帮助将不胜感激!
答案 0 :(得分:0)
括号和捕获列表都有错误。
您正在按值捕获已使用的变量,最终会复制对象。 尝试通过引用而不是值来捕获变量。 见http://en.cppreference.com/w/cpp/language/lambda
例如:
vec.erase(
std::remove_if(vec.begin(), vec.end(),
[&](std::vector<int> x) {
if (pred(x)) {
return true;
}
else {
deleted_vecs.push_back(x);
return false;
}
}),
vec.end());