Spec-Zone.ru › C++

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

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

Макросы проверки наличия функции Значение Std Функция
__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 Двусторонний итератор для value_type
const_iterator Двусторонний итератор для const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>

Члены-функции

(конструктор)
создаёт list
(публичный член-функция)
(деструктор)
уничтожает list
(публичный член-функция)
operator=
присваивает значения контейнеру
(публичный член-функция)
assign
присваивает значения контейнеру
(публичный член-функция)
assign_range
(C++23)
присваивает диапазон значений контейнеру
(публичный член-функция)
get_allocator
возвращает связанный аллокатор
(публичный член-функция)
Доступ к элементам
front
доступ к первому элементу
(публичный член-функция)
back
доступ к последнему элементу
(публичный член-функция)
Итераторы
begincbegin
(C++11)
возвращает итератор к началу
(публичный член-функция)
endcend
(C++11)
возвращает итератор к концу
(публичный член-функция)
rbegincrbegin
(C++11)
возвращает обратный итератор к началу
(публичный член-функция)
rendcrend
(C++11)
возвращает обратный итератор к концу
(публичный член-функция)
Ёмкость
empty
проверяет, пуст ли контейнер
(публичный член-функция)
size
возвращает количество элементов
(публичный член-функция)
max_size
возвращает максимальное возможное количество элементов
(публичный член-функция)
Модификаторы
clear
очищает содержимое
(публичный член-функция)
insert
вставляет элементы
(публичный член-функция)
insert_range
(C++23)
вставляет диапазон элементов
(публичный член-функция)
emplace
(C++11)
создаёт элемент на месте
(публичный член-функция)
erase
удаляет элементы
(публичный член-функция)
push_back
добавляет элемент в конец
(публичный член-функция)
emplace_back
(C++11)
создаёт элемент на месте в конце
(публичный член-функция)
append_range
(C++23)
добавляет диапазон элементов в конец
(публичный член-функция)
pop_back
удаляет последний элемент
(публичный член-функция)
push_front
вставляет элемент в начало
(публичный член-функция)
emplace_front
(C++11)
создаёт элемент на месте в начале
(публичный член-функция)
prepend_range
(C++23)
добавляет диапазон элементов в начало
(публичный член-функция)
pop_front
удаляет первый элемент
(публичный член-функция)
resize
изменяет число хранимых элементов
(публичный член-функция)
swap
меняет содержимое
(публичный член-функция)
Операции
merge
объединяет два отсортированных списка
(публичный член-функция)
splice
перемещает элементы из другого list
(публичный член-функция)
removeremove_if
удаляет элементы, удовлетворяющие определённым критериям
(публичный член-функция)
reverse
меняет порядок элементов на обратный
(публичный член-функция)
unique
удаляет последовательные дубликаты элементов
(публичный член-функция)
sort
сортирует элементы
(публичный член-функция)

Внечленённые функции

operator==operator!=operator<operator<=operator>operator>=operator<=>
(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(удалено в C++20)(C++20)
лексикографически сравнивает значения двух lists
(функция-шаблон)
std::swap(std::list)
специализирует алгоритм std::swap
(функция-шаблон)
erase(std::list)erase_if(std::list)
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API