я думаю, что вы хотите что-то вроде:
std::list<int> mylist{ 1,2,3,4,5,6,7,8,9,10 };
mylist.remove_if([](auto val)
{
return ((val % 2) == 1);
});
это удалит все неравные значения из списка
, если вы хотите результаты в другом списке:
std::list<int> mylist{ 1,2,3,4,5,6,7,8,9,10 };
std::list<int> mylistFilered;
std::copy_if(mylist.begin(), mylist.end(), std::back_inserter(mylistFilered),[](auto val)
{
return ((val % 2) == 1);
});
для фильтра, основанного на 2 последовательных элементах, нам нужен небольшой список помощников.например, вот так:
std::list<int> mylist{ 1,2,3,5,7,4,5,6,7,8,9,10 };
std::list<int> keepElement;
std::list<int> mylistFilered;
std::transform(mylist.begin(), --mylist.end(), ++mylist.begin(), std::back_inserter(keepElement),[](auto a, auto b)
{
return ((a + b) % 3 != 0);
});
или, если у вас есть, например, можно использовать -1 как недопустимое значение, например:
std::list<int> mylist{ 1,2,3,5,7,4,5,6,7,8,9,10 };
std::list<int> mylistFilered;
std::transform(mylist.begin(), --mylist.end(), ++mylist.begin(), std::back_inserter(mylistFilered),[](auto a, auto b)
{
if ((a + b) % 3 != 0)
return a;
else
return -1;
});
mylistFilered.remove_if([](auto val)
{
return (val == -1);
});