поэтому у меня есть вектор, содержащий векторы вот так:
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())));
Что-то не так, я делаю синтаксис здесь?
Мои ошибки компилятора находятся в строках «if (pred (x))» и «Удалено_vecs.push_back (x);» и скажем, что нет вызова соответствующей функции для pred и push_back, хотя мой предикат специально предназначен для получения вектора, и я объявил удаленный_вектор как вектор>.
Это заставляет меня думать, что это проблема с тем, как я объявил x, но я не уверен.
Любая помощь будет оценена!
У вас есть ошибка с круглыми скобками, а также со списком захвата.
Вы фиксируете используемые переменные по значению, что в итоге приводит к копированию объектов.
Попробуйте захватить переменные по ссылке, а не по значению.
увидеть 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());
Других решений пока нет …