Класс 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_list
right
и вставляет их в этот 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);
Параметры
Пред
Унарный предикат, который в случае совпадения с элементом приводит к удалению данного элемента из списка.
Замечания
Функция-член удаляет из управляемой последовательности все элементы, обозначенные итератором 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);
Параметры
Пред
Предикат упорядочения.
Замечания
Обе функции-члена упорядочивают элементы в управляемой последовательности по предикату, описанному ниже.
Для итераторов 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.
Трубчатый проход
Элемент, который будет вставлен из исходного объекта 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
.