У меня проблема с передачей предиката с использованием лямбда, я пытаюсь переместить элемент, соответствующий предикату, в начало второго контейнера, но он, похоже, не работает, поэтому что случилось, пожалуйста?как передать предикат алгоритму
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <utility>
#include <algorithm>
using namespace std;
template <typename iterator, typename Container, typename T>
void move_if(iterator b, iterator e, Container o, T pred)
{
if(pred)
{
o.insert(o.begin(),pred);
}
}
int main()
{
vector<int>v{1,2,3,4,5,6,7,8,9,10};
vector<int>v2;
for (auto i=v.begin(); i !=v.end(); ++i)
save_if(v.begin(), v.end(), v2, [](vector<int>::iterator i){return (*i>5);});
return 0;
}
Не должен ли цикл for быть частью 'move_if', а не основной программы? И что вы подразумеваете под 'if (pred)'? – jogojapan
Обратите внимание, что с C++ 11 существует разница между перемещением и копированием элемента. Таким образом, вы не должны использовать слово «move», если хотите скопировать элементы. Перспектива Googling - семантика должна дать довольно много результатов для начала. – inf