Namespaces
Variants

std:: forward_list

From cppreference.net
Определено в заголовочном файле <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 .

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

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

(since C++26)

Содержание

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

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

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

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

Allocator - Аллокатор, который используется для выделения/освобождения памяти и для создания/уничтожения элементов в этой памяти. Тип должен удовлетворять требованиям Allocator . Поведение не определено (until C++20) Программа некорректна (since 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 и ConstexprIterator (начиная с C++26) для value_type
const_iterator LegacyForwardIterator и ConstexprIterator (начиная с C++26) для const value_type

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

конструирует forward_list
(публичная функция-член)
уничтожает forward_list
(public member function)
присваивает значения контейнеру
(публичная функция-член)
присваивает значения контейнеру
(публичная функция-член)
присваивает диапазон значений контейнеру
(публичная функция-член)
возвращает связанный аллокатор
(публичная функция-член)
Доступ к элементам
доступ к первому элементу
(public member function)
Итераторы
возвращает итератор на элемент перед началом
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
Ёмкость
проверяет, является ли контейнер пустым
(публичная функция-член)
возвращает максимально возможное количество элементов
(public member function)
Модификаторы
очищает содержимое
(публичная функция-член)
вставляет элементы после элемента
(публичная функция-член)
создаёт элементы на месте после элемента
(публичная функция-член)
вставляет диапазон элементов после элемента
(публичная функция-член)
удаляет элемент после указанного элемента
(публичная функция-член)
вставляет элемент в начало
(public member function)
создаёт элемент на месте в начале списка
(публичная функция-член)
добавляет диапазон элементов в начало
(public member function)
удаляет первый элемент
(публичная функция-член)
изменяет количество хранимых элементов
(публичная функция-член)
обменивает содержимое
(public member function)
Операции
объединяет два отсортированных списка
(публичная функция-член)
переносит элементы из другого forward_list
(публичная функция-член)
удаляет элементы, удовлетворяющие определенным критериям
(public member function)
изменяет порядок элементов на обратный
(public member function)
удаляет последовательные повторяющиеся элементы
(public member function)
сортирует элементы
(public member function)

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

(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 s
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
удаляет все элементы, удовлетворяющие определенным критериям
(шаблон функции)

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

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

Примечания

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

Пример

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

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