Std :: list в C ++ с примером

Содержание:

Anonim

Что такое std :: list?

В C ++ std :: list относится к контейнеру хранения. Список std: позволяет вставлять и удалять элементы из любого места. Std :: list реализован как двусвязный список. Это означает, что к данным списка можно обращаться в двух направлениях и последовательно.

Список стандартной библиотеки шаблонов не поддерживает быстрый произвольный доступ, но поддерживает последовательный доступ со всех сторон.

Вы можете разбросать элементы списка по разным частям памяти. Информация, необходимая для последовательного доступа к данным, хранится в контейнере. Std :: list может расширяться и сжиматься с обоих концов по мере необходимости во время выполнения. Внутренний распределитель автоматически выполняет требования к хранилищу.

В этом руководстве по C ++ вы узнаете:

  • Что такое std :: list?
  • Зачем использовать std :: list?
  • Синтаксис списка
  • Функции списка C ++
  • Конструкторы
  • Свойства контейнера
  • Вставка в список
  • Удаление из списка

Зачем использовать std :: list?

Вот причина использования std :: List:

  • Std :: list лучше сравнивается с другими контейнерами последовательностей, такими как массив и вектор.
  • Они лучше подходят для вставки, перемещения и извлечения элементов из любого положения.
  • Std :: list также лучше справляется с алгоритмами, которые интенсивно выполняют такие операции.

Синтаксис списка

Чтобы определить std :: list, мы должны импортировать файл заголовка . Вот синтаксис определения std :: list:

template < class Type, class Alloc =allocator > class list;

Вот описание вышеуказанных параметров:

  • T - определяет тип содержащегося элемента.

    Вы можете заменить T любым типом данных, даже пользовательскими типами.

  • Alloc - определяет тип объекта распределителя.

    По умолчанию здесь используется шаблон класса распределителя. Он зависит от значения и использует простую модель распределения памяти.

Примеры 1:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };for (int x : my_list) {std::cout << x << '\n';}}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка алгоритма, чтобы использовать его функции.
  2. Включите файл заголовка iostream, чтобы использовать его функции.
  3. Включите файл заголовка списка, чтобы использовать его функции.
  4. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело этой функции.
  5. Создайте список с именем my_list с набором из 4 целых чисел.
  6. Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
  7. Распечатайте значения списка на консоли.
  8. Конец тела петли.
  9. Конец тела функции main ().

Функции списка C ++

Вот общие функции std :: list:

Функция Описание
вставлять() Эта функция вставляет новый элемент перед позицией, на которую указывает итератор.
отталкивать() Эта функция добавляет новый элемент в конец списка.
push_front () Он добавляет новый элемент в начало списка.
pop_front () Удаляет первый элемент списка.
размер() Эта функция определяет количество элементов списка.
передний() To определяет первые элементы списка.
назад() To определяет последний элемент списка.
обеспечить регресс() Он меняет местами элементы списка.
объединить () Он объединяет два отсортированных списка.

Конструкторы

Вот список функций, предоставляемых заголовочным файлом :

  • Конструктор по умолчанию std :: list :: list () - создает пустой список с нулевыми элементами.
  • Конструктор заполнения std :: list :: list () - он создает список из n элементов и присваивает каждому элементу значение ноль (0).
  • Конструктор диапазона std :: list :: list () - создает список с множеством элементов в диапазоне от первого до последнего.
  • Конструктор копирования std :: list :: list () - создает список с копией каждого элемента, содержащегося в существующем списке.
  • Конструктор перемещения std :: list :: list () - создает список с элементами другого списка, используя семантику перемещения.
  • Конструктор списка инициализаторов std :: list :: list () - создает список с элементами другого списка, используя семантику перемещения.

Пример 2:

#include #include 
using namespace std;int main(void) {list l;list l1 = { 10, 20, 30 };list l2(l1.begin(), l1.end());list l3(move(l1));cout << "Size of list l: " << l.size() << endl;cout << "List l2 contents: " << endl;for (auto it = l2.begin(); it != l2.end(); ++it)cout << *it << endl;cout << "List l3 contents: " << endl;for (auto it = l3.begin(); it != l3.end(); ++it)cout << *it << endl;return 0;}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка iostream, чтобы использовать его функции.
  2. Включите файл заголовка списка, чтобы использовать его функции.
  3. Включите пространство имен std в код, чтобы использовать его классы без его вызова.
  4. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело этой функции.
  5. Создайте пустой список с именем l.
  6. Создайте список с именем l1 с набором из 3 целых чисел.
  7. Создайте список с именем l2 со всеми элементами в списке с именем l1 от начала до конца.
  8. Создайте список с именем l3, используя семантику перемещения. Список l3 будет иметь то же содержимое, что и список l2.
  9. Напечатайте размер списка с именем l на консоли рядом с другим текстом.
  10. Напечатайте текст на консоли.
  11. Создайте итератор с именем it и используйте его для перебора элементов списка с именем l2.
  12. Вывести на консоль элементы списка с именем l2.
  13. Напечатайте текст на консоли.
  14. Создайте итератор с именем it и используйте его для перебора элементов списка с именем l3.
  15. Вывести на консоль элементы списка с именем l3.
  16. Программа должна вернуть значение после успешного завершения.
  17. Конец тела функции main ().

Свойства контейнера

Вот список свойств контейнера:

Свойство Описание
Последовательность Контейнеры Sequence упорядочивают свои элементы в строгой линейной последовательности. Доступ к элементам осуществляется по их положению в последовательности.
Двусвязный список Каждый элемент содержит информацию о том, как найти предыдущий и следующий элементы. Это обеспечивает постоянное время для операций вставки и удаления.
С учетом распределителя Объект распределителя используется для динамического изменения размера хранилища.

Вставка в список

Есть разные функции, которые мы можем использовать для вставки значений в список. Продемонстрируем это:

Пример 3:

#include #include #include 
int main() {std::list my_list = { 12, 5, 10, 9 };my_list.push_front(11);my_list.push_back(18);auto it = std::find(my_list.begin(), my_list.end(), 10);if (it != my_list.end()) {my_list.insert(it, 21);}for (int x : my_list) {std::cout << x << '\n';}}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка алгоритма, чтобы использовать его функции.
  2. Включите файл заголовка iostream, чтобы использовать его функции.
  3. Включите файл заголовка списка, чтобы использовать его функции.
  4. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело этой функции.
  5. Создайте список с именем my_list с набором из 4 целых чисел.
  6. Вставьте элемент 11 в начало списка с именем my_list.
  7. Вставьте элемент 18 в конец списка с именем my_list.
  8. Создайте итератор it и с его помощью найдите элемент 10 из списка my_list.
  9. Используйте оператор if, чтобы определить, был ли найден указанный выше элемент или нет.
  10. Вставьте элемент 21 перед указанным выше элементом, если он был найден.
  11. Конец тела оператора if.
  12. Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
  13. Распечатайте значения списка на консоли.
  14. Конец тела петли.
  15. Конец тела функции main ().

Удаление из списка

Можно удалять элементы из списка. Функция erase () позволяет удалить элемент или диапазон элементов из списка.

  • Чтобы удалить один элемент, вы просто передаете одну целую позицию. Товар будет удален.
  • Чтобы удалить диапазон, вы передаете начальный и конечный итераторы. Продемонстрируем это.

Пример 4:

#include #include #include 
using namespace std;int main() {std::list my_list = { 12, 5, 10, 9 };cout << "List elements before deletion: ";for (int x : my_list) {std::cout << x << '\n';}list::iterator i = my_list.begin();my_list.erase(i);cout << "\nList elements after deletion: ";for (int x : my_list) {std::cout << x << '\n';}return 0;}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка алгоритма, чтобы использовать его функции.
  2. Включите файл заголовка iostream, чтобы использовать его функции.
  3. Включите файл заголовка списка, чтобы использовать его функции.
  4. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  5. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело этой функции.
  6. Создайте список с именем my_list с набором из 4 целых чисел.
  7. Напечатайте текст на консоли.
  8. Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
  9. Распечатайте значения списка на консоли.
  10. Конец тела цикла for.
  11. Создайте итератор i, указывающий на первый элемент списка.
  12. Используйте функцию erase (), указанную итератором i.
  13. Напечатайте текст на консоли.
  14. Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
  15. Распечатайте значения списка на консоли. Это происходит после удаления.
  16. Конец тела цикла for.
  17. Программа должна вернуть значение после успешного завершения.
  18. Конец тела функции main ().

Резюме:

  • Std :: list - это контейнер для хранения.
  • Это позволяет вставлять и удалять элементы из любого места в постоянное время.
  • Реализован как двусвязный
  • Доступ к данным std :: list может быть двунаправленным и последовательным.
  • std :: list не поддерживает быстрый произвольный доступ. Однако он поддерживает последовательный доступ со всех сторон.
  • Вы можете разбросать элементы списка std :: list по разным частям памяти.
  • Вы можете сжимать или расширять std :: list с обоих концов по мере необходимости во время выполнения.
  • Чтобы вставить элементы в std :: list, мы используем функцию insert ().
  • Чтобы удалить элементы из std :: list, мы используем функцию erase ().