0

所以我有一个向量持有这样的向量:

vector<vector<int>> vec;

我正在尝试使用比较器(pred)来遍历 vec 中的向量,并确定哪些向量被 remove_if 和擦除删除。到目前为止,我的代码如下:

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())));

我在这里做语法方面有什么问题吗?

我的编译器错误位于“if (pred(x))”和“deleted_vecs.push_back(x);”行 并说没有对 pred 和 push_back 匹配的函数调用,尽管我的谓词专门用于接收向量,并且我已将 deleted_vecs 声明为向量>。这使我认为这是我如何声明 x 的问题,但我不确定。

任何帮助,将不胜感激!

4

1 回答 1

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());
于 2016-03-25T18:35:39.863 回答