Рубрики

Удалить элементы в списке C ++ STL

Как вставить элементы в C ++ STL List?

В этой статье рассматриваются аспекты удаления в списке STL.

  1. Использование list :: erase () : целью этой функции является удаление элементов из списка. С помощью этой функции можно удалить один или несколько смежных элементов в диапазоне. Эта функция принимает 2 аргумента: начальный итератор и конечный итератор.
    Временная сложность: O (n) где (n — размер списка).

    // C ++ код для демонстрации работы erase ()

      
    #include<iostream>
    #include<list> // for list operations

    using namespace std;

      

    int main()

    {

        // инициализируем список целых чисел

        list<int> list1={10,15,20,25,30,35};

          

        // объявляем список итераторов

        list<int>::iterator it = list1.begin();

        list<int>::iterator it1 = list1.begin();

          

        // увеличиваем позиции итераторов

        advance(it,2);

        advance(it1,5);

          

        // печать оригинального списка

        cout << "The original list is : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        // используя erase () чтобы стереть отдельный элемент

        // стирает 20

        list1.erase(it);

          

        // список после удаления 1 элемента

        cout << "The list after deleting 1 element using erase() : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        it = list1.begin();

          

        // увеличиваем позиции итераторов

        advance(it,2);

          

        // используя erase (), чтобы стереть несколько элементов

        // стирает 25,30

        list1.erase(it,it1);

          

        // список после удаления нескольких элементов

        cout << "The list after deleting multiple elements using erase() : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

      

          
    }

    Выход:

    The original list is : 10 15 20 25 30 35 
    The list after deleting 1 element using erase() : 10 15 25 30 35 
    The list after deleting multiple elements using erase() : 10 15 35 
    
  2. Используя list :: pop_front () и list :: pop_back () :
    • pop_back () : эта функция удаляет последний элемент из списка. Это уменьшает размер списка на 1.
      Сложность времени: O (1)
    • pop_front () : эта функция удаляет первый элемент из списка и сдвигает последующие элементы. Это уменьшает размер списка на 1.
      Сложность времени: O (1)

    // C ++ код для демонстрации работы pop_front ()
    // и pop_back ()

      
    #include<iostream>
    #include<list> // for list operations

    using namespace std;

      

    int main()

    {

        // инициализируем список целых чисел

        list<int> list1={10,15,20,25,30,35};

          

        // печать оригинального списка

        cout << "The original list is : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        // использование pop_front () для удаления первого элемента списка

        // всплывает 10

        list1.pop_front();

          

        // список после удаления первого элемента

        cout << "The list after deleting first element using pop_front() : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        // используя pop_back () чтобы стереть последний элемент списка

        // всплывает 35

        list1.pop_back();

          

        // список после удаления последнего элемента

        cout << "The list after deleting last element using pop_back() : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          
    }

    Выход:

    The original list is : 10 15 20 25 30 35 
    The list after deleting first element using pop_front() : 15 20 25 30 35 
    The list after deleting last element using pop_back() : 15 20 25 30 
    
  3. Используя remove () и remove_if () :
    • remove () : эта функция удаляет все вхождения значения, переданного в ее аргументах. Он отличается от «erase ()» тем, что «erase ()» удаляет значения по позиции, тогда как «remove ()» удаляет переданное значение. Размер списка уменьшается на количество удаленных вхождений.
      Сложность времени: O (n)
    • remove_if () : эта функция удаляет вхождения значений, которые возвращают «true» функции, переданной в ее аргументе.
      Сложность времени: O (n)

    // C ++ код для демонстрации работы remove ()
    // remove_if ()

      
    #include<iostream>
    #include<list> // for list operations

    using namespace std;

      
    // функция для передачи аргумента "remove_if ()"

    bool is_div_5(const int& num) { return num%5==0;} 

      

    int main()

    {

        // инициализируем список целых чисел

        list<int> list1={10,14,20,22,30,33,22};

          

        // печать оригинального списка

        cout << "The original list is : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        // используя remove (), чтобы удалить все вхождения 22

        list1.remove(22);

          

        // список после удаления всех 22 вхождений

        cout << "The list after deleting all 22 occurrences : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          

        // используя remove_if () для удаления кратного 5

        list1.remove_if(is_div_5);

          

        // список после удаления всех кратных 5

        cout << "The list after deleting all multiples of 5 : ";

        for (list<int>::iterator i=list1.begin(); i!=list1.end(); i++)

           cout << *i << " ";

           

        cout << endl;

          
    }

    Выход:

    The original list is : 10 14 20 22 30 33 22 
    The list after deleting all 22 occurrences : 10 14 20 30 33 
    The list after deleting all multiples of 5 : 14 33 
    

Эта статья предоставлена Манджитом Сингхом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Удалить элементы в списке C ++ STL

0.00 (0%) 0 votes