неправильное использование лямбды в remove_if

поэтому у меня есть вектор, содержащий векторы вот так:

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, но я не уверен.

Любая помощь будет оценена!

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]