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== всегда линейна), контейнера с поддержкой аллокатора и последовательного контейнера.
| Все функции-члены Однако определение переменной | (начиная с C++26) |
Параметры шаблона
| T | - | Тип элементов.
|
||||
| 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 |
Функции-члены
создаёт forward_list (открытая функция-член) |
|
уничтожает forward_list (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
|
|
(C++23) | присваивает контейнеру диапазон значений (открытая функция-член) |
| возвращает связанный аллокатор (открытая функция-член) |
|
Доступ к элементам |
|
| обращается к первому элементу (открытая функция-член) |
|
Итераторы |
|
| возвращает итератор на позицию перед началом (открытая функция-член) |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор на конец (открытая функция-член) |
|
Ёмкость |
|
| проверяет, пуст ли контейнер (открытая функция-член) |
|
| возвращает максимально возможное количество элементов (открытая функция-член) |
|
Модификаторы |
|
| очищает содержимое (открытая функция-член) |
|
| вставляет элементы после заданного элемента (открытая функция-член) |
|
| создаёт элементы на месте после заданного элемента (открытая функция-член) |
|
|
(C++23) | вставляет диапазон элементов после заданного элемента (открытая функция-член) |
| удаляет элемент после заданного элемента (открытая функция-член) |
|
| вставляет элемент в начало (открытая функция-член) |
|
| создаёт элемент на месте в начале (открытая функция-член) |
|
|
(C++23) | добавляет диапазон элементов в начало (открытая функция-член) |
| удаляет первый элемент (открытая функция-член) |
|
| изменяет количество хранимых элементов (открытая функция-член) |
|
| обменивает содержимое (открытая функция-член) |
|
Операции |
|
| объединяет два отсортированных списка (открытая функция-член) |
|
перемещает элементы из другого forward_list (открытая функция-член) |
|
| удаляет элементы, удовлетворяющие заданному условию (открытая функция-член) |
|
| изменяет порядок элементов на обратный (открытая функция-член) |
|
| удаляет последовательные повторяющиеся элементы (открытая функция-член) |
|
| сортирует элементы (открытая функция-член) |
|
Функции, не являющиеся членами
|
(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ов (шаблон функции) |
|
(C++11) | специализирует алгоритм std::swap (шаблон функции) |
|
(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 |
Пример
См. также
| двусвязный список (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/forward_list