Что такое 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';}}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка алгоритма, чтобы использовать его функции.
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела петли.
- Конец тела функции 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;}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Включите пространство имен std в код, чтобы использовать его классы без его вызова.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело этой функции.
- Создайте пустой список с именем l.
- Создайте список с именем l1 с набором из 3 целых чисел.
- Создайте список с именем l2 со всеми элементами в списке с именем l1 от начала до конца.
- Создайте список с именем l3, используя семантику перемещения. Список l3 будет иметь то же содержимое, что и список l2.
- Напечатайте размер списка с именем l на консоли рядом с другим текстом.
- Напечатайте текст на консоли.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l2.
- Вывести на консоль элементы списка с именем l2.
- Напечатайте текст на консоли.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l3.
- Вывести на консоль элементы списка с именем l3.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции 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';}}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка алгоритма, чтобы использовать его функции.
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Вставьте элемент 11 в начало списка с именем my_list.
- Вставьте элемент 18 в конец списка с именем my_list.
- Создайте итератор it и с его помощью найдите элемент 10 из списка my_list.
- Используйте оператор if, чтобы определить, был ли найден указанный выше элемент или нет.
- Вставьте элемент 21 перед указанным выше элементом, если он был найден.
- Конец тела оператора if.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела петли.
- Конец тела функции 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;}
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка алгоритма, чтобы использовать его функции.
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). Логика программы должна быть добавлена в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Напечатайте текст на консоли.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Создайте итератор i, указывающий на первый элемент списка.
- Используйте функцию erase (), указанную итератором i.
- Напечатайте текст на консоли.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли. Это происходит после удаления.
- Конец тела цикла for.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main ().
Резюме:
- Std :: list - это контейнер для хранения.
- Это позволяет вставлять и удалять элементы из любого места в постоянное время.
- Реализован как двусвязный
- Доступ к данным std :: list может быть двунаправленным и последовательным.
- std :: list не поддерживает быстрый произвольный доступ. Однако он поддерживает последовательный доступ со всех сторон.
- Вы можете разбросать элементы списка std :: list по разным частям памяти.
- Вы можете сжимать или расширять std :: list с обоих концов по мере необходимости во время выполнения.
- Чтобы вставить элементы в std :: list, мы используем функцию insert ().
- Чтобы удалить элементы из std :: list, мы используем функцию erase ().