std::forward_list<T,Allocator>:: splice_after
|
void
splice_after
(
const_iterator pos, forward_list
&
other
)
;
|
(1) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other
)
;
|
(2) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&
other,
const_iterator it ) ; |
(3) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other,
const_iterator it ) ; |
(4) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&
other,
const_iterator first, const_iterator last ) ; |
(5) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
void
splice_after
(
const_iterator pos, forward_list
&&
other,
const_iterator first, const_iterator last ) ; |
(6) |
(начиная с C++11)
(constexpr начиная с C++26) |
Перемещает элементы из other в * this . Элементы вставляются после pos .
Если выполняется любое из следующих условий, поведение не определено:
-
pos
не находится в диапазоне
(before_begin(),end()). - get_allocator ( ) == other. get_allocator ( ) равно false .
[
begin
(
)
,
end
(
)
)
, поведение не определено.
(
first
,
last
)
.
-
(first,last)не является допустимым диапазоном в other , -
Любой итератор в
(first,last)не является разыменуемым. -
pos
находится в
(first,last).
Никакие итераторы или ссылки не становятся недействительными. Если * this и other ссылаются на разные объекты, итераторы перемещённых элементов теперь ссылаются на * this , а не на other .
Содержание |
Параметры
| pos | - | элемент, после которого будет вставлено содержимое |
| other | - | другой контейнер, из которого переносится содержимое |
| it | - | итератор, предшествующий итератору элемента для переноса из other в * this |
| first, last | - | пара итераторов, определяющая диапазон элементов для переноса из other в * this |
Исключения
Сложность
Пример
#include <cassert> #include <forward_list> int main() { using F = std::forward_list<int>; // Демонстрация значения открытого диапазона (first, last) // в перегрузке (5): первый элемент l1 не переносится. F l1 = {1, 2, 3, 4, 5}; F l2 = {10, 11, 12}; l2.splice_after(l2.cbegin(), l1, l1.cbegin(), l1.cend()); // Не эквивалентно l2.splice_after(l2.cbegin(), l1); // что эквивалентно // 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})); // Перегрузка (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{})); // Перегрузка (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})); // Перегрузка (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 |
Гарантия O(1) слияния не могла быть обеспечена если
get_allocator ( ) ! = other. get_allocator ( ) |
поведение является
неопределённым в этом случае |
| LWG 2222 | C++11 |
элемент, на который указывает
it
не переносится, но указатели, ссылки и
итераторы, ссылающиеся на него, будут ссылаться на элемент в * this после слияния |
всё ещё ссылаются на
элемент в other |
Смотрите также
|
объединяет два отсортированных списка
(public member function) |
|
|
удаляет элементы, удовлетворяющие определенным критериям
(public member function) |
|
|
возвращает итератор на элемент перед началом
(public member function) |