std::list в C++ с примером
Что такое std::list?
В C++ std::list относится к контейнеру хранилища. std:list позволяет вам вставлять и удалять элементы из любого места. 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<T> > class list;
Вот описание вышеуказанных параметров:
- T — определяет тип содержащегося элемента.
Вы можете заменить T любым типом данных, даже определенным пользователем.
- Alloc — определяет тип объекта-распределителя.
По умолчанию используется шаблон класса распределителя. Он зависит от значения и использует простую модель распределения памяти.
Примеры 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'; } }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main(). Логика программы должна быть добавлена в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Конец тела функции main().
Функции списка C++
Вот общие функции std::list:
Функция Описание insert () Эта функция вставляет новый элемент перед позицией, на которую указывает итератор. push_back () Эта функция добавляет новый элемент в конец списка. push_front () Она добавляет новый элемент в начало списка. first item.size()Эта функция определяет количество элементов списка.front()Определяет первые элементы списка.back()Определяет последний элемент списка.reverse()Переворачивает элементы списка.merge()Объединяет два отсортированные списки.Конструкторы
Вот список функций, предоставляемых заголовочным файлом :
- Конструктор по умолчанию 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; }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Включите пространство имен std в код, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main(). Логика программы должна быть добавлена в тело этой функции.
- Создайте пустой список с именем l.
- Создайте список с именем l1 из набора из 3 целых чисел.
- Создайте список с именем l2, содержащий все элементы списка с именем l1, от начала до конца.
- Создайте список с именем l3, используя семантику перемещения. Список l3 будет иметь то же содержимое, что и список l2.
- Печать размера списка с именем l на консоли вместе с другим текстом.
- Выведите текст на консоль.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l2.
- Выведите элементы списка с именем l2 на консоль.
- Выведите текст на консоль.
- Создайте итератор с именем it и используйте его для перебора элементов списка с именем l3.
- Выведите элементы списка с именем l3 на консоль.
- Программа должна возвращать значение после успешного завершения.
- Конец тела функции main().
Свойства контейнера
Вот список свойств контейнера:
Свойство Описание Контейнеры SequenceSequence упорядочивают свои элементы в строгой линейной последовательности. Доступ к элементам осуществляется по их положению в последовательности. Двунаправленный список Каждый элемент имеет информацию о том, как найти предыдущий и следующий элементы. Это обеспечивает постоянное время для операций вставки и удаления. Распределитель-осведомленный Объект распределителя используется для динамического изменения размера хранилища.Вставка в список
Существуют различные функции, которые мы можем использовать для вставки значений в список. Давайте продемонстрируем это:
Пример 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'; } }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите файл заголовка iostream, чтобы использовать его функции.
- Включите файл заголовка списка, чтобы использовать его функции.
- Вызовите функцию main(). Логика программы должна быть добавлена в тело этой функции.
- Создайте список с именем my_list с набором из 4 целых чисел.
- Вставьте элемент 11 в начало списка с именем my_list.
- Вставьте элемент 18 в конец списка с именем my_list.
- Создайте итератор и с его помощью найдите элемент 10 из списка my_list.
- Используйте оператор if, чтобы определить, был ли указанный выше элемент найден или нет.
- Вставьте элемент 21 перед указанным выше элементом, если он был найден.
- Конец тела оператора if.
- Используйте цикл for для создания переменной цикла x. Эта переменная будет использоваться для перебора элементов списка.
- Распечатайте значения списка на консоли.
- Конец тела цикла for.
- Конец тела функции main().
Удаление из списка
Элементы из списка можно удалить. Функция Erase() позволяет вам удалить элемент или диапазон элементов из списка.
- Чтобы удалить один элемент, вы просто передаете одну целочисленную позицию. Элемент будет удален.
- Чтобы удалить диапазон, вы передаете начальный и конечный итераторы. Продемонстрируем это.
Пример 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; }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включите заголовочный файл алгоритма, чтобы использовать его функции.
- Включите файл заголовка 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().
Язык C
- Операторы в C++ с примером:что такое, типы и программы
- Цикл C++ do…while с примерами
- Оператор C++ Switch Case с ПРИМЕРОМ
- C++ динамическое выделение массивов с примером
- Указатели C++ с примерами
- Перегрузка оператора C++ с примерами
- Структура С++ с примером
- Функции C++ с примерами программ
- Разница между структурой и классом:объяснение на примере C++
- Счетчик Python в коллекциях с примером