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

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

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

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

(конструктор)
создаёт forward_list
(публичный член-функция)
(деструктор)
уничтожает 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_lists
(шаблон функции)
std::swap(std::forward_list)
(C++11)
специализация алгоритма std::swap
(шаблон функции)
erase(std::forward_list)erase_if(std::forward_list)
(C++20)
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции)

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

(с C++17)

Примечания

Feature-test макрос Значение Std Функция
__cpp_lib_containers_ranges 202202L (C++23) Конструирование и вставка диапазонов для контейнеров

Пример

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

Spec-Zone.ru

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