Spec-Zone.ru › C++

std::forward_list

Определён в заголовочном файле <forward_list>
template<
    class T,
    class Allocator = std::allocator<T>
> class forward_list;
(1) (начиная с C++11)
namespace pmr {
    template< class T >
    using forward_list = std::forward_list<T, std::pmr::polymorphic_allocator<T>>;
}
(2) (начиная с C++17)

std::forward_list — это контейнер, обеспечивающий быструю вставку и удаление элементов в любой позиции контейнера. Быстрый произвольный доступ не поддерживается. Он реализован в виде односвязного списка. По сравнению с std::list этот контейнер обеспечивает более эффективное использование памяти, когда двунаправленная итерация не требуется.

Добавление, удаление и перемещение элементов внутри списка или между несколькими списками не делает недействительными итераторы, которые в данный момент ссылаются на другие элементы списка. Однако итератор или ссылка, ссылающиеся на элемент, становятся недействительными, когда соответствующий элемент удаляется из списка (с помощью erase_after).

std::forward_list соответствует требованиям контейнера (за исключением функции-члена size и того, что сложность operator== всегда линейна), контейнера с поддержкой аллокатора и последовательного контейнера.

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

Однако определение переменной std::forward_list с constexpr обычно является ошибкой, поскольку для вычисления константного выражения требуется освободить любую динамически выделенную память в рамках того же вычисления, чего обычно не происходит при инициализации std::forward_list.

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

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

T - Тип элементов.
Требования к элементам зависят от фактически выполняемых операций над контейнером. Как правило, тип элемента должен быть полным типом и соответствовать требованиям стираемого типа, однако многие функции-члены предъявляют более строгие требования. (до C++17)

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

(начиная с C++17)
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 constvalue_type&
pointer std::allocator_traits<Allocator>::pointer
const_pointer std::allocator_traits<Allocator>::const_pointer
iterator LegacyForwardIterator и ConstexprIterator(начиная с C++26) для value_type
const_iterator LegacyForwardIterator и ConstexprIterator(начиная с C++26) для constvalue_type

Функции-члены

(constructor)
создаёт forward_list
(открытая функция-член)
(destructor)
уничтожает forward_list
(открытая функция-член)
operator=
присваивает значения контейнеру
(открытая функция-член)
assign
присваивает значения контейнеру
(открытая функция-член)
assign_range
(C++23)
присваивает контейнеру диапазон значений
(открытая функция-член)
get_allocator
возвращает связанный аллокатор
(открытая функция-член)
Доступ к элементам
front
обращается к первому элементу
(открытая функция-член)
Итераторы
before_begincbefore_begin
возвращает итератор на позицию перед началом
(открытая функция-член)
begincbegin
возвращает итератор на начало
(открытая функция-член)
endcend
возвращает итератор на конец
(открытая функция-член)
Ёмкость
empty
проверяет, пуст ли контейнер
(открытая функция-член)
max_size
возвращает максимально возможное количество элементов
(открытая функция-член)
Модификаторы
clear
очищает содержимое
(открытая функция-член)
insert_after
вставляет элементы после заданного элемента
(открытая функция-член)
emplace_after
создаёт элементы на месте после заданного элемента
(открытая функция-член)
insert_range_after
(C++23)
вставляет диапазон элементов после заданного элемента
(открытая функция-член)
erase_after
удаляет элемент после заданного элемента
(открытая функция-член)
push_front
вставляет элемент в начало
(открытая функция-член)
emplace_front
создаёт элемент на месте в начале
(открытая функция-член)
prepend_range
(C++23)
добавляет диапазон элементов в начало
(открытая функция-член)
pop_front
удаляет первый элемент
(открытая функция-член)
resize
изменяет количество хранимых элементов
(открытая функция-член)
swap
обменивает содержимое
(открытая функция-член)
Операции
merge
объединяет два отсортированных списка
(открытая функция-член)
splice_after
перемещает элементы из другого forward_list
(открытая функция-член)
removeremove_if
удаляет элементы, удовлетворяющие заданному условию
(открытая функция-член)
reverse
изменяет порядок элементов на обратный
(открытая функция-член)
unique
удаляет последовательные повторяющиеся элементы
(открытая функция-член)
sort
сортирует элементы
(открытая функция-член)

Функции, не являющиеся членами

operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++11)(C++11)(удалён в C++20)(C++11)(удалён в C++20)(C++11)(удалён в C++20)(C++11)(удалён в C++20)(C++11)(удалён в C++20)(C++20)
лексикографически сравнивает значения двух forward_listов
(шаблон функции)
std::swap(std::forward_list)
(C++11)
специализирует алгоритм std::swap
(шаблон функции)
erase(std::forward_list)erase_if(std::forward_list)
(C++20)
удаляет все элементы, удовлетворяющие заданному условию
(шаблон функции)

Руководства по выводу типа

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

Примечания

Макрос проверки поддержки функций Значение Стандарт Функция
__cpp_lib_incomplete_container_elements 201505L (C++17) Минимальная поддержка неполных типов
__cpp_lib_containers_ranges 202202L (C++23) Создание контейнеров из диапазонов и вставка диапазонов в контейнеры
__cpp_lib_constexpr_forward_list 202502L (C++26) std::forward_list с поддержкой constexpr

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/forward_list

Spec-Zone.ru

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