Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

forward_list::insert_after

公众成员函数  <forward_list>
(1)
iterator insert_after ( const_iterator position, const value_type& val );
(2)
iterator insert_after ( const_iterator position, value_type&& val );
(3)
iterator insert_after ( const_iterator position, size_type n, const value_type& val );
(4)
template <class InputIterator>
  iterator insert_after ( const_iterator position, InputIterator first, InputIterator last );
(5)
iterator insert_after ( const_iterator position, initializer_list<value_type> il );

插入元素

通过在某个位置元素之后插入新元素来扩展容器。

容器的大小增加.

与其他标准序列容器不同,list和forward_list对象被专门设计为在任意位置高效地插入和删除元素,即使是在序列的中间。

还有一个类似的成员函数emplace_after,它直接在原位构造插入的元素对象,而不执行任何复制或移动操作。

参数决定插入多少元素以及初始化元素的值:

☲  参数


position
在容器中插入新元素的位置。
成员类型const_iterator是指向元素的前向迭代器类型。
val
要复制(或移动)插入元素的值。
成员类型value_type是容器中元素的类型,在forward_list中定义为第一个模板形参(T)的别名。
n
要插入的元素数。每个元素都被初始化为val的副本。
成员类型size_type是一个无符号整型。
first, last
指定元素范围的迭代器。range [first,last]中的元素的副本被插入到position位置(按照相同的顺序)。
注意,该范围包括first和last之间的所有元素,包括first所指向的元素,但不包括last所指向的元素。
函数模板实参InputIterator必须是一个输入迭代器类型,该类型指向可以构造value_type对象的类型的元素。
il
一个initializer_list对象。这些元素的副本在position处插入(按照相同的顺序)。 这些对象是由初始化列表声明符自动构造的。
成员类型value_type是容器中元素的类型,在forward_list中定义为第一个模板形参(T)的别名。

☉  返回值



一个迭代器,指向新插入元素的最后一个,如果没有插入元素则指向该位置。

成员类型迭代器是指向元素的前向迭代器类型。

新元素的存储是使用allocator_traits<allocator_type>::construct()分配的, 如果失败,可能会抛出异常(对于默认的分配器,如果分配请求不成功,会抛出bad_alloc)。

☣  示例



// forward_list::insert_after
#include <iostream>
#include <array>
#include <forward_list>

int main ()
{
  std::array<int,3> myarray = { 11, 22, 33 };
  std::forward_list<int> mylist;
  std::forward_list<int>::iterator it;

  it = mylist.insert_after ( mylist.before_begin(), 10 );          // 10
                                                                   //  ^  <- it
  it = mylist.insert_after ( it, 2, 20 );                          // 10 20 20
                                                                   //        ^
  it = mylist.insert_after ( it, myarray.begin(), myarray.end() ); // 10 20 20 11 22 33
                                                                   //                 ^
  it = mylist.begin();                                             //  ^
  it = mylist.insert_after ( it, {1,2,3} );                        // 10 1 2 3 20 20 11 22 33
                                                                   //        ^

  std::cout << "mylist contains:";
  for (int& x: mylist) std::cout << ' ' << x;
  std::cout << '\n';
  return 0;
}

输出:
mylist contains: 10 1 2 3 20 20 11 22 33

✥ 复杂度



与插入元素的数量成线性关系(复制/移动构造)。

☣ 迭代器的有效性



没有改变.

⇄ 数据竞争


完成容器的修改。
不访问所包含的元素。并发地访问或修改不同的元素是安全的,但是迭代包含位置的范围就不安全了。

☂ 异常安全性



强保证:如果抛出异常,容器中没有任何变化。
如果allocator_traits::construct不支持元素构造的适当参数, 或者指定了无效的位置或范围,则会导致未定义的行为。

🍄  另请参阅



forward_list::push_front 在开头插入元素(公众成员函数)
forward_list::emplace_after 构造并插入元素 (公众成员函数)
forward_list::splice_after 从另一个forward_list转移元素 (公众成员函数)
forward_list::merge 合并已排序的容器 (公众成员函数)
forward_list::erase_after 删除元素(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图