std::forward_list<T,Allocator>::splice_after
来自 cppreference.com
void splice_after( const_iterator pos, forward_list& other ); |
(1) | (自 C++11 起) |
void splice_after( const_iterator pos, forward_list&& other ); |
(2) | (自 C++11 起) |
void splice_after( const_iterator pos, forward_list& other, const_iterator it ); |
(3) | (自 C++11 起) |
void splice_after( const_iterator pos, forward_list&& other, const_iterator it ); |
(4) | (自 C++11 起) |
void splice_after( const_iterator pos, forward_list& other, const_iterator first, const_iterator last ); |
(5) | (自 C++11 起) |
void splice_after( const_iterator pos, forward_list&& other, const_iterator first, const_iterator last ); |
(6) | (自 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),
内容 |
[编辑] 参数
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 | 如果无法保证 O(1) 拼接 get_allocator() != other.get_allocator() |
在这种情况下,行为是 未定义的 |
[编辑] 另请参阅
合并两个已排序的列表 (公有成员函数) | |
删除满足特定条件的元素 (公有成员函数) | |
返回到开始元素之前的迭代器 (公有成员函数) |