Класс forward_list

Описывает объект, управляющий последовательностью элементов переменной длины. Последовательность хранится в виде однонаправленного связного списка узлов, каждый из которых содержит член типа Type.

Синтаксис

template <class Type,
    class Allocator = allocator<Type>>
class forward_list

Параметры

Тип*
Тип данных элементов, сохраняемых в forward_list.

Распределителя
Сохраненный объект распределителя, содержащий сведения о распределении и отмене распределения памяти для списка forward_list. Это необязательный параметр. Значение по умолчанию — распределитель<Type>.

Замечания

Объект forward_list выделяет и освобождает хранилище для последовательности, которую он управляет с помощью хранимого объекта allocator класса, который основан на классе распределителя (обычно известном как std::allocator). Дополнительные сведения см. в статье Распределители. Объект распределителя должен иметь тот же внешний интерфейс, что и объект типа allocator.

Примечание.

Сохраненный объект распределителя не копируется, когда назначается объект контейнера.

Итераторы, указатели и ссылки могут стать недопустимыми, если элементы их управляемой последовательности удаляются c помощью forward_list. Вставки и splices, выполняемые в управляемой последовательности, forward_list не делают итераторы недействительными.

Дополнения к управляемой последовательности могут возникнуть при вызове метода forward_list::insert_after, который является единственной функцией-членом, вызывающей конструктор Type(const T&). forward_list также может вызывать конструкторы перемещения. Если такое выражение создает исключение, объект-контейнер не вставляет новые элементы и повторно создает исключение. Таким образом, объект типа forward_list остается в известном состоянии при возникновении таких исключений.

Участники

Конструкторы

Имя Описание
forward_list Создает объект типа forward_list.

Определения типов

Имя Описание
allocator_type Тип, представляющий класс распределителя для объекта прямого списка.
const_iterator Тип, предоставляющий константный итератор для прямого списка.
const_pointer Тип, предоставляющий указатель на элемент const в прямом списке.
const_reference Тип, предоставляющий константную ссылку на элемент в прямом списке.
difference_type Тип целого числа со знаком, который можно использовать для представления количества элементов в прямом списке в диапазоне между элементами, на которые указывают итераторы.
iterator Тип, предоставляющий итератор для прямого списка.
pointer Тип, предоставляющий указатель на элемент в прямом списке.
reference Тип, предоставляющий ссылку на элемент в прямом списке.
size_type Тип, представляющий беззнаковое расстояние между двумя элементами.
value_type Тип, представляющий тип элемента, хранящегося в прямом списке.

Функции

Имя Описание
assign Удаляет элементы из прямого списка и копирует новый набор элементов в целевой прямой список.
before_begin Возвращает итератор, указывающий на позицию перед первым элементом в прямом списке.
begin Возвращает итератор, указывающий на первый элемент в прямом списке.
cbefore_begin Возвращает константный итератор, указывающий на позицию перед первым элементом в прямом списке.
cbegin Возвращает константный итератор, обращающийся к первому элементу в прямом списке.
cend Возвращает константный итератор, адресующий расположение после последнего элемента в прямом списке.
пусто Удаляет все элементы прямого списка.
emplace_after Создает с перемещением новый элемент после указанной позиции.
emplace_front Добавляет элемент, созданный на месте, в начало списка.
empty Проверяет, пуст ли прямой список.
end Возвращает итератор, адресующий расположение после последнего элемента в прямом списке.
erase_after Удаляет элементы из прямого списка после указанной позиции.
front Возвращает ссылку на первый элемент в прямом списке.
get_allocator Возвращает копию объекта объекта распределителя, использованного для создания прямого списка.
insert_after Добавляет элементы в прямой список после указанной позиции.
max_size Возвращает максимальную длину прямого списка.
merge Удаляет элементы из списка аргументов, вставляет их в целевой прямой список и сортирует новый объединенный набор элементов по возрастанию или в ином указанном порядке.
pop_front Удаляет элемент в начале прямого списка.
push_front Добавляет элемент в начало прямого списка.
remove Удаляет из прямого списка элементы, совпадающие с заданным значением.
remove_if Удаляет из прямого списка элементы, для которых выполняется заданный предикат.
resize Указывает новый размер прямого списка.
reverse Изменяет порядок следования элементов в прямом списке на обратный.
sort Упорядочивает элементы по возрастанию или по порядку, указанному предикатом.
splice_after Восстанавливает ссылки между узлами.
swap Меняет местами элементы двух прямых списков.
unique Удаляет смежные элементы, которые прошли заданный тест.

Операторы

Имя Описание
operator= Заменяет элементы прямого списка копией другого прямого списка.

allocator_type

Тип, представляющий класс распределителя для объекта прямого списка.

typedef Allocator allocator_type;

Замечания

allocator_type — синоним параметра-шаблона Allocator.

назначить

Удаляет элементы из прямого списка и копирует новый набор элементов в целевой прямой список.

void assign(
    size_type Count,
    const Type& Val);

void assign(
    initializer_list<Type> IList);

template <class InputIterator>
void assign(InputIterator First, InputIterator Last);

Параметры

first
Начало диапазона замены.

last
Конец диапазона замены.

count
Число элементов для присвоения.

Val
Значение, присваиваемое каждому элементу.

Тип
Тип значения.

IList
Копируемый initializer_list.

Замечания

Если forward_list имеет целочисленный тип, первая функция-член ведет себя так же, как assign((size_type)First, (Type)Last). В противном случае первая функция-член заменяет последовательность, которой управляет *this, на последовательность [ First, Last), которая не должна перекрывать начальную управляемую последовательность.

Вторая функция-член заменяет последовательность, которой управляет *this, на повторение элементов Count со значением Val.

Третья функция-член копирует элементы initializer_list в forward_list.

before_begin

Возвращает итератор, указывающий на позицию перед первым элементом в прямом списке.

const_iterator before_begin() const;
iterator before_begin();

Возвращаемое значение

Прямой итератор, указывающий непосредственно перед первым элементом последовательности (или только перед концом пустой последовательности).

Замечания

begin

Возвращает итератор, указывающий на первый элемент в прямом списке.

const_iterator begin() const;
iterator begin();

Возвращаемое значение

Прямой итератор, указывающий на первый элемент последовательности (или на место сразу за концом пустой последовательности).

Замечания

cbefore_begin

Возвращает константный итератор, указывающий на позицию перед первым элементом в прямом списке.

const_iterator cbefore_begin() const;

Возвращаемое значение

Прямой итератор, указывающий непосредственно перед первым элементом последовательности (или только перед концом пустой последовательности).

Замечания

cbegin

Возвращает итератор const, направленный на первый элемент в диапазоне.

const_iterator cbegin() const;

Возвращаемое значение

Итератор прямого доступа const, который указывает на первый элемент диапазона или расположение прямо за концом пустого диапазона (cbegin() == cend() для пустого диапазона).

Замечания

При возвращаемом значении cbeginэлементы в диапазоне не могут быть изменены.

Эту функцию-член можно использовать вместо функции-члена begin(), чтобы гарантировать, что возвращаемое значение будет const_iterator. Как правило, он используется с вычетом автотипа ключевое слово, как показано в следующем примере. В примере Container следует рассматривать как изменяемый (не-const) контейнер любого вида, который поддерживает begin() и cbegin().

auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator

cend

Возвращает итератор const, который обращается к месту, следующему сразу за последним элементом в диапазоне.

const_iterator cend() const;

Возвращаемое значение

Итератор прямого доступа, который указывает на позицию сразу за концом диапазона.

Замечания

cend используется для проверки того, прошел ли итератор конец диапазона.

Эту функцию-член можно использовать вместо функции-члена end(), чтобы гарантировать, что возвращаемое значение будет const_iterator. Как правило, он используется с вычетом автотипа ключевое слово, как показано в следующем примере. В примере Container следует рассматривать как изменяемый (не-const) контейнер любого вида, который поддерживает end() и cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

Возвращаемое cend значение не должно быть разоменовывано.

clear

Удаляет все элементы прямого списка.

void clear();

Замечания

Вызовы erase_after(before_begin(), end())этой функции-члена.

const_iterator

Тип, предоставляющий константный итератор для прямого списка.

typedef implementation-defined const_iterator;

Замечания

const_iterator описывает объект, который можно использовать в качестве постоянного прямого итератора для управляемой последовательности. Здесь описано как синоним для определенного реализацией типа.

const_pointer

Тип, предоставляющий указатель на элемент const в прямом списке.

typedef typename Allocator::const_pointer
    const_pointer;

Замечания

const_reference

Тип, предоставляющий константную ссылку на элемент в прямом списке.

typedef typename Allocator::const_reference const_reference;

Замечания

difference_type

Тип целого числа со знаком, который можно использовать для представления количества элементов в прямом списке в диапазоне между элементами, на которые указывают итераторы.

typedef typename Allocator::difference_type difference_type;

Замечания

difference_type описывает объект, который может представлять разницу между адресами любых двух элементов в управляемой последовательности.

emplace_after

Создает с перемещением новый элемент после указанной позиции.

template <class T>
iterator emplace_after(const_iterator Where, Type&& val);

Параметры

Where
Позиция в конечном прямом списке, где создается новый элемент.

Val
Аргумент конструктора.

Возвращаемое значение

Итератор, указывающий на новый вставленный элемент.

Замечания

Эта функция-член вставляет элемент с аргументами конструктора val сразу после элемента, на который указывает Where в управляемой последовательности. Его поведение в противном случае такое же, как forward_list::insert_after.

emplace_front

Добавляет элемент, созданный на месте, в начало списка.

template <class Type>
    void emplace_front(Type&& val);

Параметры

Val
Элемент, добавляемый в начало прямого списка.

Замечания

Эта функция-член вставляет элемент с помощью аргументов конструктора _ val в конце управляемой последовательности.

При создании исключения контейнер не изменяется, а исключение создается снова.

empty

Проверяет, пуст ли прямой список.

bool empty() const;

Возвращаемое значение

Значение true, если прямой список пуст; в противном случае — значение false.

end

Возвращает итератор, адресующий расположение после последнего элемента в прямом списке.

const_iterator end() const;
iterator end();

Возвращаемое значение

Прямой итератор, который указывает на позицию непосредственно за концом последовательности.

erase_after

Удаляет элементы из прямого списка после указанной позиции.

iterator erase_after(const_iterator Where);
iterator erase_after(const_iterator first, const_iterator last);

Параметры

Where
Позиция в конечном прямом списке, где элемент удален.

first
Начало диапазона для удаления.

last
Конец диапазона для удаления.

Возвращаемое значение

Итератор, который обозначает первый элемент, находящийся за всеми удаленными элементами, или forward_list::end, если такой элемент не существует.

Замечания

Первая функция-член удаляет элемент управляемой последовательности сразу после where.

Вторая функция-член удаляет элементы управляемой последовательности в диапазоне ( first, last) (конечные точки не включаются).

Удаление элементов N приводит к вызовам деструктора N. Происходит перераспределение, поэтому итераторы и ссылки становятся недействительными только для удаленных элементов.

Функции-члены не создают исключений.

forward_list

Создает объект типа forward_list.

forward_list();
explicit forward_list(const Allocator& Al);
explicit forward_list(size_type Count);
forward_list(size_type Count, const Type& Val);
forward_list(size_type Count, const Type& Val, const Allocator& Al);
forward_list(const forward_list& Right);
forward_list(const forward_list& Right, const Allocator& Al);
forward_list(forward_list&& Right);
forward_list(forward_list&& Right, const Allocator& Al);
forward_list(initializer_list<Type> IList, const Alloc& Al);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last);
template <class InputIterator>
forward_list(InputIterator First, InputIterator Last, const Allocator& Al);

Параметры

Аль
Класс распределителя для использования с данным объектом.

Численность
Количество элементов в создаваемом списке.

Валь
Значение элементов в создаваемом списке.

Right
Список, для которого создаваемый список станет копией.

First
Положение первого элемента в диапазоне копируемых элементов.

Последняя
Положение первого элемента после диапазона копируемых элементов.

IList
Копируемый initializer_list.

Замечания

Все конструкторы сохраняют allocator и инициализируют управляемую последовательность. Объект распределителя — это аргумент Al, если он присутствует. Для конструктора копирования это right.get_allocator(). В противном случае возвращается Allocator().

Первые два конструктора определяют пустую исходную управляемую последовательность.

Третий конструктор задает повторение элементов count значения Type().

Четвертый и пятый конструкторы указывают повторение элементов Count значения Val.

Шестой конструктор задает копию последовательности, управляемой справа. Если InputIterator имеет целочисленный тип, следующие два конструктора определяют повторение (size_type)First элементов со значением (Type)Last. В противном случае два следующих конструктора определяют последовательность [First, Last).

Девятый и десятый конструкторы совпадают с шестым, но со ссылкой rvalue.

Последний конструктор определяет начальную управляемую последовательность с объектом класса initializer_list<Type>.

front

Возвращает ссылку на первый элемент в прямом списке.

reference front();
const_reference front() const;

Возвращаемое значение

Ссылка на первый элемент управляемой последовательности, который должен быть не пустым.

get_allocator

Возвращает копию объекта объекта распределителя, использованного для создания прямого списка.

allocator_type get_allocator() const;

Возвращаемое значение

Сохраненный объект allocator.

insert_after

Добавляет элементы в прямой список после указанной позиции.

iterator insert_after(const_iterator Where, const Type& Val);
void insert_after(const_iterator Where, size_type Count, const Type& Val);
void insert_after(const iterator Where, initializer_list<Type> IList);
iterator insert_after(const_iterator Where, Type&& Val);
template <class InputIterator>
    void insert_after(const_iterator Where, InputIterator First, InputIterator Last);

Параметры

Where
Положение в целевом прямом списке, куда вставляется первый элемент.

Численность
Число элементов для вставки.

First
Начало диапазона вставки.

Последняя
Конец диапазона вставки.

Валь
Элемент, добавляемый в прямой список.

IList
initializer_list для вставки.

Возвращаемое значение

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

Замечания

Каждая из функций-членов вставляется сразу после элемента, на который указывает Where в управляемой последовательности, — последовательность, указанная оставшимися операндами.

Первая функция-член вставляет элемент с значением Val и возвращает итератор, указывающий только что вставленный элемент.

Вторая функция-член вставляет повторение элементов count значения Val.

Если InputIterator имеет целочисленный тип, первая функция-член ведет себя так же, как insert(it, (size_type)First, (Type)Last). В противном случае она вставляет последовательность [First, Last), которая не должна перекрывать начальную управляемую последовательность.

Четвертая функция-член вставляет последовательность, указанную объектом класса initializer_list<Type>.

Последняя функция-член идентична первой, но со ссылкой rvalue.

Вставка элементов N приводит к вызовам конструктора N. Происходит перераспределение, но никакие итераторы и ссылки не становятся недействительными.

При создании исключения во время вставки одного или более элементов контейнер не изменяется, а исключение создается снова.

iterator

Тип, предоставляющий итератор для прямого списка.

typedef implementation-defined iterator;

Замечания

iterator описывает объект, который можно использовать в качестве прямого итератора для управляемой последовательности. Здесь описано как синоним для определенного реализацией типа.

max_size

Возвращает максимальную длину прямого списка.

size_type max_size() const;

Возвращаемое значение

Длина самой длинной последовательности, которой может управлять объект.

Замечания

merge

Объединяет две отсортированные последовательности в одну отсортированную последовательность в линейном времени. Удаляет элементы из списка аргументов и вставляет их в этот forward_list. Два списка должны быть отсортированы одним и тем же объектом функции сравнения перед вызовом в merge. Объединенный список будут отсортирован этим объектом функции сравнения.

void merge(forward_list& right);
template <class Predicate>
    void merge(forward_list& right, Predicate comp);

Параметры

right
Прямой список, из которого следует выполнять слияние.

comp
Объект функции сравнения, используемый для сортировки элементов.

Замечания

forward_list::merge Удаляет элементы из элемента forward_listrightи вставляет их в этот forward_listфайл. Обе последовательности должны быть упорядочены по одному и тому же предикату, описанному ниже. Объединенная последовательность также упорядочивается этим объектом функции сравнения.

Для итераторов Pi и Pj, обозначающих элементы в позициях i и j, первая функция-член упорядочивает !(*Pj < *Pi) каждый раз, когда i < j. (Элементы отсортированы по ascending порядку.) Вторая функция-член вводит порядок ! comp(*Pj, *Pi) всякий раз i < j.

Никакие пары элементов в исходной управляемой последовательности не переставляются в результирующей управляемой последовательности. Если пара элементов в результирующей управляемой последовательности равна ( !(*Pi < *Pj) && !(*Pj < *Pi)), элемент из исходного управляемой последовательности появляется перед элементом из последовательности, управляемой right.

Исключение возникает только в том случае, если comp создает исключение. В этом случае управляемая последовательность остается в неопределенном порядке, и исключение создается снова.

operator=

Заменяет элементы прямого списка копией другого прямого списка.

forward_list& operator=(const forward_list& right);
forward_list& operator=(initializer_list<Type> IList);
forward_list& operator=(forward_list&& right);

Параметры

right
Прямой список, копируемый в прямой список.

IList
Список инициализаторов, заключенных в скобки, который ведет себя так же, как последовательность элементов типа Type.

Замечания

Первый оператор-член заменяет контролируемую последовательность копией последовательности, управляемой справа.

Второй оператор член заменяет управляемую последовательность из объекта класса initializer_list<Type>.

Третий оператор член идентичен первому, но со ссылкой rvalue.

указатель

Тип, предоставляющий указатель на элемент в прямом списке.

typedef typename Allocator::pointer pointer;

pop_front

Удаляет элемент в начале прямого списка.

void pop_front();

Замечания

Первый элемент прямого списка не должен быть пустым.

Функция-член никогда не создает исключений.

push_front

Добавляет элемент в начало прямого списка.

void push_front(const Type& val);
void push_front(Type&& val);

Параметры

Val
Элемент, добавляемый в начало прямого списка.

Замечания

При создании исключения контейнер не изменяется, а исключение создается снова.

Получение

Тип, предоставляющий ссылку на элемент в прямом списке.

typedef typename Allocator::reference reference;

remove

Удаляет из прямого списка элементы, совпадающие с заданным значением.

void remove(const Type& val);

Параметры

Val
Значение, которое должен иметь элемент для удаления этого элемента из списка.

Замечания

Функция-член удаляет из управляемой последовательности все элементы, обозначенные итератором P, для которого *P == val.

Функция-член никогда не создает исключений.

remove_if

Удаляет из прямого списка элементы, для которых выполняется заданный предикат.

template <class Predicate>
    void remove_if(Predicate pred);

Параметры

Pred
Унарный предикат, который в случае совпадения с элементом приводит к удалению данного элемента из списка.

Замечания

Функция-член удаляет из управляемой последовательности все элементы, обозначенные итератором P, для которого pred(*P) — true.

Исключение возникает только в том случае, если предопределено исключение. В этом случае управляемая последовательность остается в неопределенном состоянии, и исключение создается снова.

изменить размер

Указывает новый размер прямого списка.

void resize(size_type _Newsize);
void resize(size_type _Newsize, const Type& val);

Параметры

_Newsize
Число элементов в прямом списке с измененным размером.

Val
Значение, используемое для заполнения.

Замечания

Функции-члены обе гарантируют, что количество элементов в списке теперь _Newsize. Если она должна сделать управляемой последовательности длиннее, первая функция-член добавляет элементы со значениемType(), а вторая функция-член добавляет элементы со значением val. Чтобы сделать управляемую последовательность более короткой, обе функции-члены вызывают erase_after(begin() + _Newsize - 1, end()).

reverse

Изменяет порядок следования элементов в прямом списке на обратный.

void reverse();

size_type

Тип, представляющий беззнаковое расстояние между двумя элементами.

typedef typename Allocator::size_type size_type;

Замечания

Целочисленный тип без знака описывает объект, который может представлять длину любой управляемой последовательности.

sort

Упорядочивает элементы по возрастанию или по порядку, указанному предикатом.

void sort();
template <class Predicate>
void sort(Predicate pred);

Параметры

Pred
Предикат упорядочения.

Замечания

Обе функции-члена упорядочивают элементы в управляемой последовательности по предикату, описанному ниже.

Для итераторов Pi и Pj, обозначающих элементы в позициях i и j, первая функция-член упорядочивает !(*Pj < *Pi) каждый раз, когда i < j. (Элементы отсортированы по ascending порядку.) Функция шаблона-члена накладывает порядок ! pred(*Pj, *Pi) всякий раз i < j. Никакие упорядоченные пары элементов в исходной управляемой последовательности не переставляются в результирующей управляемой последовательности. (Порядок сортировки стабилен.)

Исключение возникает только в том случае, если предопределено исключение. В этом случае управляемая последовательность остается в неопределенном порядке, и исключение создается снова.

splice_after

Удаляет элементы из исходного объекта forward_list и вставляет их в целевой объект forward_list.

// insert the entire source forward_list
void splice_after(const_iterator Where, forward_list& Source);
void splice_after(const_iterator Where, forward_list&& Source);

// insert one element of the source forward_list
void splice_after(const_iterator Where, forward_list& Source, const_iterator Iter);
void splice_after(const_iterator Where, forward_list&& Source, const_iterator Iter);

// insert a range of elements from the source forward_list
void splice_after(
    const_iterator Where,
    forward_list& Source,
    const_iterator First,
    const_iterator Last);

void splice_after(
    const_iterator Where,
    forward_list&& Source,
    const_iterator First,
    const_iterator Last);

Параметры

Where
Позиция в целевом объекте forward_list, после которого будут вставлены элементы.

Источник
Исходный объект forward_list, который необходимо вставить в целевой forward_list.

Iter
Элемент, который будет вставлен из исходного объекта forward_list.

First
Первый элемент в диапазоне, который будет вставлен из исходного объекта forward_list.

Последняя
Первая позиция за пределами диапазона, в которой будут вставлены элементы из исходного объекта forward_list.

Замечания

Первая пара функций-членов вставляет последовательность, контролируемую источником сразу после элемента в управляемой последовательности, на которую указывает Where. Он также удаляет все элементы из источника. (Значение &Source не должно быть равно this.)

Вторая пара функций-членов удаляет элемент сразу после итер в последовательности, управляемой источником , и вставляет его сразу после элемента в управляемой последовательности, на которую указывает Where. (Если Where == Iter || Where == ++Iter, изменения не происходят.)

Третья пара функций-членов (ranged splice) вставляет подранг, назначенный (First, Last) из последовательности, управляемой источником сразу после элемента в управляемой последовательности, на которую указывает Where. Он также удаляет исходный подранг из последовательности, управляемой источником. (Если &Source == thisдиапазон (First, Last) не должен включать элемент, указывающий на Where.)

Если срез с диапазоном вставляет N элементов и &Source != this, объект класса iteratorN раз увеличивается.

Никакие итераторы, указатели или ссылки, которые обозначают соединенные элементы, не становятся недействительными.

Пример

// forward_list_splice_after.cpp
// compile with: /EHsc /W4
#include <forward_list>
#include <iostream>

using namespace std;

template <typename S> void print(const S& s) {
    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    forward_list<int> c1{ 10, 11 };
    forward_list<int> c2{ 20, 21, 22 };
    forward_list<int> c3{ 30, 31 };
    forward_list<int> c4{ 40, 41, 42, 43 };

    forward_list<int>::iterator where_iter;
    forward_list<int>::iterator first_iter;
    forward_list<int>::iterator last_iter;

    cout << "Beginning state of lists:" << endl;
    cout << "c1 = ";
    print(c1);
    cout << "c2 = ";
    print(c2);
    cout << "c3 = ";
    print(c3);
    cout << "c4 = ";
    print(c4);

    where_iter = c2.begin();
    ++where_iter; // start at second element
    c2.splice_after(where_iter, c1);
    cout << "After splicing c1 into c2:" << endl;
    cout << "c1 = ";
    print(c1);
    cout << "c2 = ";
    print(c2);

    first_iter = c3.begin();
    c2.splice_after(where_iter, c3, first_iter);
    cout << "After splicing the first element of c3 into c2:" << endl;
    cout << "c3 = ";
    print(c3);
    cout << "c2 = ";
    print(c2);

    first_iter = c4.begin();
    last_iter = c4.end();
    // set up to get the middle elements
    ++first_iter;
    c2.splice_after(where_iter, c4, first_iter, last_iter);
    cout << "After splicing a range of c4 into c2:" << endl;
    cout << "c4 = ";
    print(c4);
    cout << "c2 = ";
    print(c2);
}
Beginning state of lists:c1 = (10) (11)c2 = (20) (21) (22)c3 = (30) (31)c4 = (40) (41) (42) (43)After splicing c1 into c2:c1 =c2 = (20) (21) (10) (11) (22)After splicing the first element of c3 into c2:c3 = (30)c2 = (20) (21) (31) (10) (11) (22)After splicing a range of c4 into c2:c4 = (40) (41)c2 = (20) (21) (42) (43) (31) (10) (11) (22)

swap

Меняет местами элементы двух прямых списков.

void swap(forward_list& right);

Параметры

right
Прямой список, предоставляющий элементы для обмена.

Замечания

Функция-член переключает управляемые последовательности между *this и справа. Если get_allocator() == right.get_allocator(), она делает это в константном времени, не создает исключения и не делает недействительными ссылки, указатели или итераторы, которые указывают элементы в двух управляемых последовательностях. В противном случае он выполняет назначения элементов и вызовы конструктора пропорционально количеству элементов в двух управляемых последовательностях.

unique

Удаляет все, кроме первого элемента из каждой последовательной группы равных элементов.

void unique();
template <class BinaryPredicate>
void unique(BinaryPredicate comp);

Параметры

comp
Двоичный предикат, используемый для сравнения последовательных элементов.

Замечания

Сохраняет первый из каждого уникального элемента и удаляет остальные. Элементы должны быть отсортированы, чтобы элементы с одинаковым значением находились в списке рядом друг с другом.

Первая функция-член удаляет из управляемой последовательности каждый элемент, равный предшествующему элементу. Для итераторов Pi и Pj, указывающих элементы в позициях i и j, вторая функция-член удаляет каждый элемент, для которого i + 1 == j && comp(*Pi, *Pj).

Для управляемой последовательности длины N (> 0) предикат comp(*Pi, *Pj) вычисляется N - 1 время.

Исключение возникает только в том случае, если comp создает исключение. В этом случае управляемая последовательность остается в неопределенном состоянии, и исключение создается снова.

value_type

Тип, представляющий тип элемента, хранящегося в прямом списке.

typedef typename Allocator::value_type value_type;

Замечания

Этот тип является синонимом для параметра шаблона Type.