std::list
Определено в заголовочном файле <list> | ||
|---|---|---|
template<
class T,
class Allocator = std::allocator<T>
> class list;
| (1) | |
namespace pmr {
template< class T >
using list = std::list<T, std::pmr::polymorphic_allocator<T>>;
}
| (2) | (с C++17) |
std::list — это контейнер, поддерживающий вставку и удаление элементов в любой части контейнера за постоянное время. Быстрый произвольный доступ не поддерживается. Обычно он реализуется как двусвязный список. По сравнению с std::forward_list, этот контейнер обеспечивает двустороннюю итерацию, но при этом менее эффективен по объёму памяти.
Добавление, удаление и перемещение элементов внутри списка или между несколькими списками не приводит к инвалидации итераторов или ссылок. Итератор инвалидируется только при удалении соответствующего элемента.
std::list соответствует требованиям контейнера, контейнера с поддержкой аллокатора, последовательного контейнера и обратимого контейнера.
Параметры шаблона
| T | - | Тип элементов.
|
||||||||||||||
| Allocator | - | Аллокатор, используемый для выделения/освобождения памяти и для создания/удаления элементов в этой памяти. Тип должен удовлетворять требованиям Allocator. Поведение не определено(до C++20)Программа некорректна(с C++20) если Allocator::value_type не совпадает с T. |
Типы членов
| Тип члена | Определение | ||||
|---|---|---|---|---|---|
value_type | T |
||||
allocator_type | Allocator |
||||
size_type | Целочисленный тип без знака (обычно std::size_t) |
||||
difference_type | Целочисленный тип со знаком (обычно std::ptrdiff_t) |
||||
reference | value_type& |
||||
const_reference | const value_type& | ||||
pointer |
|
||||
const_pointer |
|
||||
iterator | Двусторонний итератор для value_type |
||||
const_iterator | Двусторонний итератор для const value_type | ||||
reverse_iterator | std::reverse_iterator<iterator> | ||||
const_reverse_iterator | std::reverse_iterator<const_iterator> |
Члены-функции
создаёт list (публичный член-функция) |
|
уничтожает list (публичный член-функция) |
|
| присваивает значения контейнеру (публичный член-функция) |
|
| присваивает значения контейнеру (публичный член-функция) |
|
|
(C++23) | присваивает диапазон значений контейнеру (публичный член-функция) |
| возвращает связанный аллокатор (публичный член-функция) |
|
Доступ к элементам |
|
| доступ к первому элементу (публичный член-функция) |
|
| доступ к последнему элементу (публичный член-функция) |
|
Итераторы |
|
|
(C++11) | возвращает итератор к началу (публичный член-функция) |
|
(C++11) | возвращает итератор к концу (публичный член-функция) |
|
(C++11) | возвращает обратный итератор к началу (публичный член-функция) |
|
(C++11) | возвращает обратный итератор к концу (публичный член-функция) |
Ёмкость |
|
| проверяет, пуст ли контейнер (публичный член-функция) |
|
| возвращает количество элементов (публичный член-функция) |
|
| возвращает максимальное возможное количество элементов (публичный член-функция) |
|
Модификаторы |
|
| очищает содержимое (публичный член-функция) |
|
| вставляет элементы (публичный член-функция) |
|
|
(C++23) | вставляет диапазон элементов (публичный член-функция) |
|
(C++11) | создаёт элемент на месте (публичный член-функция) |
| удаляет элементы (публичный член-функция) |
|
| добавляет элемент в конец (публичный член-функция) |
|
|
(C++11) | создаёт элемент на месте в конце (публичный член-функция) |
|
(C++23) | добавляет диапазон элементов в конец (публичный член-функция) |
| удаляет последний элемент (публичный член-функция) |
|
| вставляет элемент в начало (публичный член-функция) |
|
|
(C++11) | создаёт элемент на месте в начале (публичный член-функция) |
|
(C++23) | добавляет диапазон элементов в начало (публичный член-функция) |
| удаляет первый элемент (публичный член-функция) |
|
| изменяет число хранимых элементов (публичный член-функция) |
|
| меняет содержимое (публичный член-функция) |
|
Операции |
|
| объединяет два отсортированных списка (публичный член-функция) |
|
перемещает элементы из другого list (публичный член-функция) |
|
| удаляет элементы, удовлетворяющие определённым критериям (публичный член-функция) |
|
| меняет порядок элементов на обратный (публичный член-функция) |
|
| удаляет последовательные дубликаты элементов (публичный член-функция) |
|
| сортирует элементы (публичный член-функция) |
|
Внечленённые функции
|
(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20) | лексикографически сравнивает значения двух lists (функция-шаблон) |
специализирует алгоритм std::swap (функция-шаблон) |
|
|
(C++20) | удаляет все элементы, удовлетворяющие определённым критериям (функция-шаблон) |
Руководства по выводу | (с C++17) |
Примечания
| Макроинструкция для проверки наличия функций | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Создание и вставка диапазонов для контейнеров |
Пример
#include <algorithm>
#include <iostream>
#include <list>
int main()
{
// Create a list containing integers
std::list<int> l = {7, 5, 16, 8};
// Add an integer to the front of the list
l.push_front(25);
// Add an integer to the back of the list
l.push_back(13);
// Insert an integer before 16 by searching
auto it = std::find(l.begin(), l.end(), 16);
if (it != l.end())
l.insert(it, 42);
// Print out the list
std::cout << "l = { ";
for (int n : l)
std::cout << n << ", ";
std::cout << "};\n";
}Вывод:
l = { 25, 7, 5, 42, 16, 8, 13, };Отчёты об ошибках
Следующие отчёты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, опубликованное в стандарте | Правильное поведение |
|---|---|---|---|
| LWG 230 | C++98 |
T не должно было быть CopyConstructible(элемент типа T мог не быть создан) |
T также должно быть CopyConstructible |
| LWG 276 | C++98 |
T всегда должно было быть CopyAssignable | требовалось только если operator= илиassign были инициализированы с T |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/list