Класс list: удаление элементов

Для удаления элементов предназначены следующие методы:

  • pop_front() — удаляет первый элемент. Прототип метода:
void pop_front();

Пример:

std::list<int> arr = {1, 2, 3};
arr.pop_front();
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 2 3
  • pop_back() — удаляет последний элемент. Прототип метода:
void pop_back();

Пример:

std::list<int> arr = {1, 2, 3};
arr.pop_back();
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 1 2
  • erase() — удаляет один элемент или элементы из диапазона. Прототипы метода:
iterator erase(const_iterator pos);
iterator erase(const_iterator first, const_iterator last);

Первый прототип удаляет элемент на который указывает итератор. Второй прототип удаляет элементы из диапазона, ограниченного итераторами first и last:

std::list<int> arr = {1, 2, 3, 4, 5};
arr.erase(arr.begin());
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 2 3 4 5
std::list<int>::iterator it1 = arr.begin();
std::list<int>::iterator it2 = arr.begin();
std::advance(it1, 1);   // Перемещаем итератор
std::advance(it2, 3);   // Перемещаем итератор
arr.erase(it1, it2);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 2 5
  • clear() — удаляет все элементы. Прототип метода:
void clear() noexcept;

Пример:

std::list<int> arr = {1, 2, 3, 4, 5};
arr.clear();
std::cout << arr.size() << std::endl;     // 0
  • remove() — удаляет все элементы, имеющие значение val. Прототип метода:
void remove(const value_type &val);

Пример:

std::list<int> arr = {0, 1, 1, 1, 2, 1};
arr.remove(1);
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 2
  • remove_if() — удаляет элементы, для которых унарный функтор pred вернул значение true. Функтор, возвращающий логическое значение, называется предикатом. Прототип метода:
template<typename _Predicate>
   void remove_if(_Predicate pred);

Удалим все элементы, значения которых меньше двух:

std::list<int> arr = {0, 1, 1, 1, 2, 1, 3, 4};
arr.remove_if( [](int a){ return a < 2; } );
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 2 3 4
  • unique() — удаляет повторяющиеся элементы. Прототипы метода:
void unique();
template<typename _BinaryPredicate>
   void unique(_BinaryPredicate pred);

Первый прототип удаляет повторяющиеся элементы, расположенные рядом. Чтобы список состоял только из уникальных элементов необходимо предварительно отсортировать список. Второй прототип передает два элемента бинарному функтору. Если функтор вернет значение true, то элемент будет удален. Пример:

std::list<int> arr = {0, 1, 1, 1, 2, 1, 1, 1};
arr.unique();
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 1 2 1
arr = {0, 1, 1, 1, 2, 1, 1, 1};
arr.unique( [](int a, int b){ return a == b; } );
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 0 1 2 1

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов