C ++: использование remove_if для фильтрации вектора по условию - PullRequest
0 голосов
/ 01 декабря 2018

Каков правильный синтаксис для использования erase + remove_if для удаления всех элементов в векторе, которые меньше определенного значения.Однако это конкретное значение не является константой, а является переменной.

Обратитесь к коду, чтобы лучше понять вопрос:

for (int i = 0; i < arr.size(); i++)
{
    int currEle = arr[i];

    /*
        How do I use erase + remove_if to remove the elements from arr that
        are smaller than currEle? 
    */

}

1 Ответ

0 голосов
/ 01 декабря 2018

В следующем примере демонстрируется использование erase-remove_if.limit фиксируется ссылкой и, таким образом, может быть изменено вне лямбды:

#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
    std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};
    int size = vec.size();
    for (int limit = 0; limit <= size; limit++)
    {
        vec.erase(std::remove_if(std::begin(vec), std::end(vec), [&limit](int i) {
            return i < limit;
        }), std::end(vec));
        for (auto& v : vec)
            std::cout << v;
        std::cout << std::endl;
    }
    return 0;
}

Ожидаемый результат:

0123456789
123456789
23456789
3456789
456789
56789
6789
789
89
9
...