std::list в C++ с примером
⚡ Умное резюме
std::list в C++ is a sequence container implemented as a doubly linked list, enabling fast insertion and deletion at any position while storing elements in non-contiguous memory and supporting bidirectional sequential access instead of random access.

Что такое std::list?
In C++, the std::list refers to a storage container. The std::list allows you to insert and remove items from anywhere. The std::list is implemented as a doubly-linked list. This means list data can be accessed bi-directionally and sequentially.
The Standard Template Library list does not support fast random access, but it supports sequential access from all directions.
Вы можете разбросать элементы списка по разным участкам памяти. Информация, необходимая для последовательного доступа к данным, хранится в контейнере. Std::list может расширяться и сжиматься с обоих концов по мере необходимости во время выполнения. Внутренний распределитель автоматически удовлетворяет требования к хранилищу.
These traits raise a practical question: when should you actually reach for a list?
Зачем использовать std::list?
Here are the reasons for using std::list:
- The std::list does better compared to other sequence containers like array and vector.
- Они демонстрируют лучшие показатели при вставке, перемещении и извлечении.tracЭлементы, расположенные в любом месте.
- Std::list также лучше справляется с алгоритмами, которые интенсивно выполняют такие операции.
With the reasons clear, the next step is the syntax that declares one.
Синтаксис списка
Чтобы определить std::list, нам нужно импортировать заголовочный файл. Вот синтаксис определения std::list:
template < class Type, class Alloc =allocator<T> > class list;
Вот описание вышеуказанных параметров:
- T – Defines the type of element contained. You can substitute T by any data type, even user-defined types.
- Alloc – Defines the type of the allocator object. This uses the allocator class template by default. It is value-dependent and uses a simple memory allocation model.
Пример 1
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> my_list = { 12, 5, 10, 9 }; for (int x : my_list) { std::cout << x << '\n'; } }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите заголовочный файл iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Использовать для цикла to create a loop variable x. This variable will be used to iterate over the list elements.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Конец тела функции main().
C++ Список функций
Вот общие функции std::list:
| Функция | Описание |
|---|---|
| вставка () | Эта функция вставляет новый элемент перед позицией, на которую указывает итератор. |
| отталкивать() | Эти функции добавляют новый элемент в конец списка. |
| push_front() | Он добавляет новый элемент в начало списка. |
| поп_фронт() | Он удаляет первый элемент списка. |
| размер() | Эта функция определяет количество элементов списка. |
| передний() | Определяет первые элементы списка. |
| назад() | Чтобы определить последний элемент списка. |
| обеспечить регресс() | Он переворачивает элементы списка. |
| объединить () | Он объединяет два отсортированных списка. |
Конструкторы
Вот список Функции предоставлено заголовочный файл:
- Конструктор по умолчанию std::list::list() — создает пустой список с нулевыми элементами.
- Конструктор заполнения std::list::list() — создает список из n элементов и присваивает каждому элементу значение ноль (0).
- Конструктор диапазона std::list::list() — создает список со множеством элементов в диапазоне от первого до последнего.
- Конструктор копирования std::list::list() — создает список с копией каждого элемента, содержащегося в существующем списке.
- Конструктор перемещения std::list::list() — создает список с элементами другого списка, используя семантику перемещения.
- Конструктор списка инициализаторов std::list::list() — создает список с элементами другого списка, используя семантику перемещения.
Пример 2
#include <iostream> #include <list> using namespace std; int main(void) { list<int> l; list<int> l1 = { 10, 20, 30 }; list<int> l2(l1.begin(), l1.end()); list<int> 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; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите заголовочный файл iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Включите пространство имен std в код, чтобы использовать его классы без его вызова.
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте пустой список с именем l.
- Создайте список с именем l1 с набором из трех целых чисел.
- Создайте список с именем l2 со всеми элементами списка с именем l1 от начала до конца.
- Создайте список с именем l3, используя семантику перемещения. Список l3 будет иметь то же содержимое, что и список l2.
- Выведите размер списка с именем l на консоли вместе с другим текстом.
- Напечатайте текст на консоли.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l2.
- Выведите элементы списка с именем l2 на консоль.
- Напечатайте текст на консоли.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l3.
- Выведите элементы списка с именем l3 на консоль.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main().
Свойства контейнера
Вот список свойств контейнера:
| Свойства | Описание |
|---|---|
| Последовательность | Контейнеры последовательностей упорядочивают свои элементы в строгой линейной последовательности. Доступ к элементам осуществляется по их положению в последовательности. |
| Двусвязный список | Каждый элемент содержит информацию о том, как найти предыдущий и следующий элементы. Это обеспечивает постоянное время для операций вставки и удаления. |
| С поддержкой распределителя | Объект-распределитель используется для динамического изменения размера хранилища. |
Вставка в список
There are different functions that we can use to insert values into a list. Let us demonstrate this:
Пример 3
#include <algorithm> #include <iostream> #include <list> int main() { std::list<int> 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'; } }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите заголовочный файл iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Вставьте элемент 11 в начало списка с именем my_list.
- Вставьте элемент 18 в конец списка с именем my_list.
- Создайте для него итератор и с его помощью найдите элемент 10 из списка my_list.
- Используйте оператор if, чтобы определить, найден ли указанный выше элемент или нет.
- Вставьте элемент 21 перед указанным выше элементом, если он был найден.
- Конец тела оператора if.
- Используйте цикл for, чтобы создать переменную цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Конец тела функции main().
Elements that go into a list can just as easily be taken out.
Удаление из списка
It is possible to delete items from a list. The erase() function allows you to delete an item or a range of items from a list.
- Чтобы удалить один элемент, вы просто передаете одну целочисленную позицию. Элемент будет удален.
- To delete a range, you pass the starting and the ending iterators. Let us demonstrate this.
Пример 4
#include <algorithm> #include <iostream> #include <list> using namespace std; int main() { std::list<int> my_list = { 12, 5, 10, 9 }; cout << "List elements before deletion: "; for (int x : my_list) { std::cout << x << '\n'; } list<int>::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; }
Выход:
Вот скриншот кода:
Code Объяснение:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите заголовочный файл iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Напечатайте текст на консоли.
- Используйте цикл for, чтобы создать переменную цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Создайте итератор i, указывающий на первый элемент списка.
- Используйте функцию стирания(), на которую указывает итератор i.
- Напечатайте текст на консоли.
- Используйте цикл for, чтобы создать переменную цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли. Это происходит после удаления.
- Конец тела цикла for.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main().






