std:: list
|
Определено в заголовочном файле
<list>
|
||
|
template
<
class
T,
|
(1) | |
|
namespace
pmr
{
template
<
class
T
>
|
(2) | (начиная с C++17) |
std::list
— это контейнер, который поддерживает вставку и удаление элементов из любого места контейнера за постоянное время. Быстрый произвольный доступ не поддерживается. Обычно реализуется как двусвязный список. По сравнению с
std::forward_list
этот контейнер обеспечивает двунаправленную итерацию, будучи менее эффективным по использованию памяти.
Добавление, удаление и перемещение элементов внутри списка или между несколькими списками не инвалидирует итераторы или ссылки. Итератор инвалидируется только тогда, когда соответствующий элемент удаляется.
std::list
удовлетворяет требованиям
Container
,
AllocatorAwareContainer
,
SequenceContainer
и
ReversibleContainer
.
Все функции-члены
std::list
являются
constexpr
: возможно создавать и использовать объекты
std::list
при вычислении константного выражения.
Однако, объекты
|
(начиная с C++26) |
Содержание |
Параметры шаблона
| 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
|
LegacyBidirectionalIterator
и
ConstexprIterator
(начиная с C++26)
для
value_type
|
||||
const_iterator
|
LegacyBidirectionalIterator и ConstexprIterator (начиная с C++26) для const value_type | ||||
reverse_iterator
|
std:: reverse_iterator < iterator > | ||||
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
Функции-члены
создаёт
list
(public member function) |
|
уничтожает
list
(публичная функция-член) |
|
|
присваивает значения контейнеру
(публичная функция-член) |
|
|
присваивает значения контейнеру
(публичная функция-член) |
|
|
(C++23)
|
присваивает диапазон значений контейнеру
(публичная функция-член) |
|
возвращает связанный аллокатор
(публичная функция-член) |
|
Доступ к элементам |
|
|
доступ к первому элементу
(публичная функция-член) |
|
|
доступ к последнему элементу
(публичная функция-член) |
|
Итераторы |
|
|
(C++11)
|
возвращает итератор на начало
(public member function) |
|
(C++11)
|
возвращает итератор на конец
(публичная функция-член) |
|
(C++11)
|
возвращает обратный итератор на начало
(публичная функция-член) |
|
(C++11)
|
возвращает обратный итератор на конец
(публичная функция-член) |
Ёмкость |
|
|
проверяет, является ли контейнер пустым
(публичная функция-член) |
|
|
возвращает количество элементов
(публичная функция-член) |
|
|
возвращает максимально возможное количество элементов
(публичная функция-член) |
|
Модификаторы |
|
|
очищает содержимое
(публичная функция-член) |
|
|
вставляет элементы
(публичная функция-член) |
|
|
(C++23)
|
вставляет диапазон элементов
(публичная функция-член) |
|
(C++11)
|
создаёт элемент на месте
(публичная функция-член) |
|
удаляет элементы
(публичная функция-член) |
|
|
добавляет элемент в конец
(публичная функция-член) |
|
|
(C++11)
|
создаёт элемент непосредственно в конце контейнера
(публичная функция-член) |
|
(C++23)
|
добавляет диапазон элементов в конец
(публичная функция-член) |
|
удаляет последний элемент
(публичная функция-член) |
|
|
вставляет элемент в начало
(публичная функция-член) |
|
|
(C++11)
|
создаёт элемент непосредственно в начале
(публичная функция-член) |
|
(C++23)
|
добавляет диапазон элементов в начало
(публичная функция-член) |
|
удаляет первый элемент
(публичная функция-член) |
|
|
изменяет количество хранимых элементов
(публичная функция-член) |
|
|
обменивает содержимое
(публичная функция-член) |
|
Операции |
|
|
объединяет два отсортированных списка
(публичная функция-член) |
|
переносит элементы из другого
list
(публичная функция-член) |
|
|
удаляет элементы, удовлетворяющие определенным критериям
(public member function) |
|
|
изменяет порядок элементов на обратный
(public member function) |
|
|
удаляет последовательные повторяющиеся элементы
(публичная функция-член) |
|
|
сортирует элементы
(public member function) |
|
Функции, не являющиеся членами класса
|
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(удалено в C++20)
(C++20)
|
лексикографически сравнивает значения двух
list
(шаблон функции) |
|
специализирует алгоритм
std::swap
(шаблон функции) |
|
|
удаляет все элементы, удовлетворяющие определенным критериям
(шаблон функции) |
Руководства по выводу |
(начиная с C++17) |
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Конструирование и вставка диапазонов для контейнеров |
__cpp_lib_constexpr_list
|
202502L
|
(C++26) |
constexpr
std::list
|
Пример
#include <algorithm> #include <iostream> #include <list> int main() { // Создаем список, содержащий целые числа std::list<int> l = {7, 5, 16, 8}; // Добавляем целое число в начало списка l.push_front(25); // Добавляем целое число в конец списка l.push_back(13); // Вставляем целое число перед 16 путем поиска auto it = std::find(l.begin(), l.end(), 16); if (it != l.end()) l.insert(it, 42); // Выводим список std::cout << "l = { "; for (int n : l) std::cout << n << ", "; std::cout << "};\n"; }
Вывод:
l = { 25, 7, 5, 42, 16, 8, 13, };
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 230 | C++98 |
T
was not required to be
CopyConstructible
(an element of type
T
might not be able to be constructed)
|
T
is also required to
be CopyConstructible |
| LWG 276 | C++98 |
T
was always required to be
CopyAssignable
|
only required if
operator=
or
assign is instantiated with
T
|
Смотрите также
|
(C++11)
|
односвязный список
(шаблон класса) |