std::forward_list<T,Allocator>::splice_after
void splice_after( const_iterator pos, forward_list& other ); |
(1) | (since C++11) |
void splice_after( const_iterator pos, forward_list&& other ); |
(2) | (since C++11) |
void splice_after( const_iterator pos, forward_list& other,
const_iterator it ); |
(3) | (since C++11) |
void splice_after( const_iterator pos, forward_list&& other,
const_iterator it ); |
(4) | (since C++11) |
void splice_after( const_iterator pos, forward_list& other,
const_iterator first, const_iterator last ); |
(5) | (since C++11) |
void splice_after( const_iterator pos, forward_list&& other,
const_iterator first, const_iterator last ); |
(6) | (since C++11) |
Перемещает элементы из другого forward_list в *this. Элементы вставляются после элемента, на который указывает pos.
Элементы не копируются. Итераторы и ссылки не становятся недействительными. Итераторы на перемещенные элементы теперь ссылаются на *this, а не на other.
1,2) Перемещает все элементы из
other в *this. Контейнер other становится пустым после операции.
3,4) Перемещает элемент, на который указывает итератор, следующий за
it из other в *this. Не имеет эффекта, если pos == it или если pos == ++it.
5,6) Перемещает элементы в диапазоне
(first, last) из other в *this. Элемент, на который указывает first, не перемещается. Поведение не определено, если
-
get_allocator() != other.get_allocator(), -
posне является ниbefore_begin()ни итерируемым элементом в[begin(),end()), - для перегрузок (1,2),
*thisиotherссылаются на один и тот же объект, - для перегрузок (3,4), итератор, следующий за
itне является итерируемым элементом вother, или - для перегрузок (5,6),
-
(first,last)не является валидным диапазоном вother, - некоторые итераторы в
(first,last)не являются итерируемыми, или -
posнаходится в(first,last).
Параметры
| pos | - | элемент, после которого будет вставлено содержимое |
| other | - | другой контейнер, из которого нужно переместить содержимое |
| it | - | итератор, предшествующий итератору на элемент, который нужно переместить из other в *this |
| first, last | - | диапазон элементов, которые нужно переместить из other в *this |
Возвращаемое значение
(нет)
Исключения
Не выбрасывает ничего.
Сложность
1,2) Линейно зависит от размера
other.
3,4) Постоянная.
5,6) Линейно зависит от
std::distance(first, last). Пример
#include <cassert>
#include <forward_list>
int main()
{
using F = std::forward_list<int>;
// Demonstrate the meaning of open range (first, last)
// in overload (5): the first element of l1 is not moved.
F l1 = {1, 2, 3, 4, 5};
F l2 = {10, 11, 12};
l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend());
// Not equivalent to l2.splice_after(l2.cbegin(), l1);
// which is equivalent to
// l2.splice_after(l2.cbegin(), l1, l1.cbefore_begin(), l1.end());
assert((l1 == F{1}));
assert((l2 == F{10, 2, 3, 4, 5, 11, 12}));
// Overload (1)
F x = {1, 2, 3, 4, 5};
F y = {10, 11, 12};
x.splice_after(x.cbegin(), y);
assert((x == F{1, 10, 11, 12, 2, 3, 4, 5}));
assert((y == F{}));
// Overload (3)
x = {1, 2, 3, 4, 5};
y = {10, 11, 12};
x.splice_after(x.cbegin(), y, y.cbegin());
assert((x == F{1, 11, 2, 3, 4, 5}));
assert((y == F{10, 12}));
// Overload (5)
x = {1, 2, 3, 4, 5};
y = {10, 11, 12};
x.splice_after(x.cbegin(), y, y.cbegin(), y.cend());
assert((x == F{1, 11, 12, 2, 3, 4, 5}));
assert((y == F{10}));
}Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применён к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 2045 | C++11 | О(1) слияние не могло быть гарантировано, еслиget_allocator() != other.get_allocator() |
поведение в этом случае не определено |
См. также
| объединяет два отсортированных списка (public member function) |
|
| удаляет элементы, удовлетворяющие определённым критериям (public member function) |
|
| возвращает итератор к элементу перед началом (public member function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/forward_list/splice_after