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

std::

deque::insert

公众成员函数  <deque>

C++98: single element (1)
iterator insert (iterator position, const value_type& val);
fill (2)
    void insert (iterator position, size_type n, const value_type& val);
range (3)
template <class InputIterator>
    void insert (iterator position, InputIterator first, InputIterator last);
插入元素
deque容器是通过在指定位置的元素之前插入新元素来扩展的。

容器大小增加.

双端队列设计用于从序列的末尾或开头高效地执行插入(和删除)。 在其他位置插入通常比在list或forward_list容器中插入效率低。

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

☲  参数


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

☉  返回值



指向第一个新插入元素的迭代器。

成员类型iterator是一种指向元素的随机访问迭代器类型。

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

☣  示例



// inserting into a deque
#include <iostream>
#include <deque>
#include <vector>

int main ()
{
  std::deque<int> mydeque;

  // set some initial values:
  for (int i=1; i<6; i++) mydeque.push_back(i); // 1 2 3 4 5

  std::deque<int>::iterator it = mydeque.begin();
  ++it;

  it = mydeque.insert (it,10);                  // 1 10 2 3 4 5
  // "it" now points to the newly inserted 10

  mydeque.insert (it,2,20);                     // 1 20 20 10 2 3 4 5
  // "it" no longer valid!

  it = mydeque.begin()+2;

  std::vector<int> myvector (2,30);
  mydeque.insert (it,myvector.begin(),myvector.end());
                                                // 1 20 30 30 20 10 2 3 4 5

  std::cout << "mydeque contains:";
  for (it=mydeque.begin(); it!=mydeque.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

输出:
mydeque contains: 1 20 30 30 20 10 2 3 4 5

✥ 复杂度



与插入元素的数量成线性关系(复制/移动构造)。 另外,根据特定的标准库实现,在位置和deque的一个端点之间的元素数量最多为一个线性。

☣ 迭代器的有效性



如果插入发生在序列的开头或结尾,则与该容器相关的所有迭代器都会失效, 但指针和引用仍然有效,它们指向的元素与调用前相同。
如果插入发生在deque容器的其他位置,所有与该容器相关的迭代器、指针和引用都会失效。

⇄ 数据竞争


容器被修改;
如果插入发生在序列的开头或结尾,则不会访问所包含的元素(尽管请参阅上面的迭代器有效性)。
如果发生在其他地方,则并发访问元素是不安全的。

☂ 异常安全性



如果操作在开始或结束插入单个元素,在异常情况下容器中不会发生任何更改(强保证)。
否则,容器将保证以有效状态结束(基本保证)。
如果allocator_traits::construct不支持元素构造的适当参数, 或者指定了无效的位置或范围,则会导致未定义的行为。

🍄  另请参阅



deque::erase 删除元素(公众成员函数)
deque::push_back 在末尾添加元素 (公众成员函数)
deque::push_front 在开头插入元素 (公众成员函数)

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