◐ Shell
clean mode source ↗

std::forward_list — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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 отвечает требованиям Container (за исключением функции-элемента size(), а сложность operator== всегда линейна), AllocatorAwareContainer и SequenceContainer.

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

T Тип элементов.
Требования, предъявляемые к элементам, зависят от фактических операций, выполняемых с контейнером. Как правило, требуется, чтобы тип элемента был полным типом и отвечал требованиям Erasable, но многие функции-элементы предъявляют более строгие требования. (до 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 std::allocator_traits<Allocator>::pointer [править]
const_pointer std::allocator_traits<Allocator>::const_pointer [править]
iterator LegacyForwardIterator в value_type [править]
const_iterator LegacyForwardIterator в const value_type [править]

Функции-элементы

создаёт forward_list
(public функция-элемент) [править]
уничтожает forward_list
(public функция-элемент) [править]

(C++11)

присваивает значения контейнеру
(public функция-элемент) [править]

(C++11)

присваивает значения контейнеру
(public функция-элемент) [править]
присваивает диапазон значений контейнеру
(public функция-элемент) [править]
возвращает связанный аллокатор
(public функция-элемент) [править]
Доступ к элементам

(C++11)

предоставляет доступ к первому элементу
(public функция-элемент) [править]
Итераторы
возвращает итератор на элемент, предшествующий первому
(public функция-элемент) [править]
возвращает итератор на начало
(public функция-элемент) [править]

(C++11)

возвращает итератор на конец
(public функция-элемент) [править]
Ёмкость

(C++11)

проверяет, пуст ли контейнер
(public функция-элемент) [править]

(C++11)

возвращает максимально возможное количество элементов
(public функция-элемент) [править]
Модификаторы

(C++11)

очищает содержимое
(public функция-элемент) [править]
вставляет элементы после указанного элемента
(public функция-элемент) [править]
создаёт элементы на месте после указанного элемента
(public функция-элемент) [править]
вставляет диапазон элементов после элемента
(public функция-элемент) [править]
удаляет элементы после указанного элемента
(public функция-элемент) [править]
вставляет элемент в начало списка
(public функция-элемент) [править]
создаёт элементы на месте в начале списка
(public функция-элемент) [править]
добавляет диапазон элементов в начало
(public функция-элемент) [править]

(C++11)

удаляет первый элемент
(public функция-элемент) [править]

(C++11)

изменяет количество хранимых элементов
(public функция-элемент) [править]

(C++11)

обменивает содержимое
(public функция-элемент) [править]
Операции

(C++11)

сливает два отсортированных списка
(public функция-элемент) [править]
перемещает элементы из другого forward_list
(public функция-элемент) [править]
удаляет элементы, соответствующие определённым критериям
(public функция-элемент) [править]

(C++11)

меняет порядок элементов на обратный
(public функция-элемент) [править]

(C++11)

удаляет последовательные повторяющиеся элементы
(public функция-элемент) [править]

(C++11)

сортирует элементы
(public функция-элемент) [править]

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

Примечание

Макрос тест функциональности Значение Стандарт Комментарий
__cpp_lib_containers_ranges 202202L (C++23) Создание и вставка диапазонов для контейнеров

Пример