Namespaces
Variants

std:: list

From cppreference.net
Определено в заголовочном файле <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 удовлетворяет требованиям Container , AllocatorAwareContainer , SequenceContainer и ReversibleContainer .

Все функции-члены std::list являются constexpr : возможно создавать и использовать объекты std::list при вычислении константного выражения.

Однако, объекты std::list обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(начиная с C++26)

Содержание

Параметры шаблона

T - Тип элементов.
T должен удовлетворять требованиям CopyConstructible . T должен удовлетворять требованиям CopyAssignable если list::operator= или list::assign инстанцируются с T . (до C++11)
Требования, накладываемые на элементы, зависят от фактических операций, выполняемых с контейнером. Обычно требуется, чтобы тип элемента был полным типом и удовлетворял требованиям Erasable , но многие функции-члены накладывают более строгие требования. (начиная с C++11)
(до C++17)

Требования, накладываемые на элементы, зависят от фактических операций, выполняемых с контейнером. Обычно требуется, чтобы тип элемента удовлетворял требованиям Erasable , но многие функции-члены накладывают более строгие требования. Этот контейнер (но не его члены) может быть инстанцирован с неполным типом элемента, если аллокатор удовлетворяет требованиям полноты аллокатора .

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_incomplete_container_elements 201505L (C++17) Минимальная поддержка неполных типов
(начиная с C++17)

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

Allocator::pointer

(до C++11)

std:: allocator_traits < Allocator > :: pointer

(начиная с C++11)
const_pointer

Allocator::const_pointer

(до C++11)

std:: allocator_traits < Allocator > :: const_pointer

(начиная с C++11)
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
(публичная функция-член)
присваивает значения контейнеру
(публичная функция-член)
присваивает значения контейнеру
(публичная функция-член)
присваивает диапазон значений контейнеру
(публичная функция-член)
возвращает связанный аллокатор
(публичная функция-член)
Доступ к элементам
доступ к первому элементу
(публичная функция-член)
доступ к последнему элементу
(публичная функция-член)
Итераторы
возвращает итератор на начало
(public member function)
(C++11)
возвращает итератор на конец
(публичная функция-член)
возвращает обратный итератор на начало
(публичная функция-член)
(C++11)
возвращает обратный итератор на конец
(публичная функция-член)
Ёмкость
проверяет, является ли контейнер пустым
(публичная функция-член)
возвращает количество элементов
(публичная функция-член)
возвращает максимально возможное количество элементов
(публичная функция-член)
Модификаторы
очищает содержимое
(публичная функция-член)
вставляет элементы
(публичная функция-член)
вставляет диапазон элементов
(публичная функция-член)
(C++11)
создаёт элемент на месте
(публичная функция-член)
удаляет элементы
(публичная функция-член)
добавляет элемент в конец
(публичная функция-член)
создаёт элемент непосредственно в конце контейнера
(публичная функция-член)
добавляет диапазон элементов в конец
(публичная функция-член)
удаляет последний элемент
(публичная функция-член)
вставляет элемент в начало
(публичная функция-член)
создаёт элемент непосредственно в начале
(публичная функция-член)
добавляет диапазон элементов в начало
(публичная функция-член)
удаляет первый элемент
(публичная функция-член)
изменяет количество хранимых элементов
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
Операции
объединяет два отсортированных списка
(публичная функция-член)
переносит элементы из другого 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

Смотрите также

односвязный список
(шаблон класса)