C++官网参考链接:https://cplusplus.com/reference/deque/deque/insert/
公有成员函数
<deque>
std::deque::insert
C++98
单个元素 (1)
iterator insert (iterator position, const value_type& val);
填充 (2)
void insert (iterator position, size_type n, const value_type& val);
范围 (3)
template <class InputIterator> void insert (iterator position, InputIterator first, InputIterator last);
C++11
单个元素 (1)
iterator insert (const_iterator position, const value_type& val);
填充 (2)
iterator insert (const_iterator position, size_type n, const value_type& val);
范围 (3)
template <class InputIterator>iterator insert (const_iterator position, InputIterator first, InputIterator last);
移动 (4)
iterator insert (const_iterator position, value_type&& val);
初始化列表 (5)
iterator insert (const_iterator position, initializer_list<value_type> il);
插入元素
deque容器通过在指定位置的元素之前插入新元素来扩展。
这将根据所插入元素的数量有效地增加容器的size。
deque设计为从序列的结束或开始高效地执行插入(和删除)。在其他位置插入通常比在list或forward_list容器中效率低。
形参决定插入多少元素以及初始化它们的值:
形参
position
插入新元素的容器中的位置。
iterator是成员类型,定义为指向元素的随机访问迭代器(random access iterator)类型。
val
值要复制(或移动)到插入的元素。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板形参(T)的别名。
n
要插入的元素数量。每个元素都初始化为val的副本。
成员类型size_type是无符号整型。
first,last
指定元素范围的迭代器。范围[first,last)中的元素副本被插入到position(以相同的顺序)。
注意,该范围包括first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
函数模板实参InputIterator应该是一个输入迭代器(input iterator)类型,它指向可以构造value_type对象的类型元素。
il
一个initializer_list对象。这些元素的副本插入position(以相同的顺序)。
这些对象是由初始化器列表声明器自动构造的。
成员类型value_type是容器中元素的类型,在deque中定义为其第一个模板形参(T)的别名。
返回值
指向新插入的第一个元素的迭代器。
成员类型iterator是指向元素的随机访问迭代器(random access iterator)类型。
新元素的存储是使用容器的分配器(allocator)分配的,这可能会在失败时抛出异常(对于默认分配器(allocator),如果分配请求不成功,则抛出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;
}
输出:

复杂度
在插入的元素数量上是线性的(复制/移动构造)。另外,根据特定的库实现,加上在position和deque的结束处之一之间的元素数量中的一个额外的线性。
迭代器有效性
如果插入发生在序列的开始或结束处,则与此容器相关的所有迭代器都将失效,但指针和引用仍然有效,指向调用之前所引用的相同元素。
如果插入发生在deque的其他位置,则与此容器相关的所有迭代器、指针和引用都将失效。
数据竞争
完成容器的修改。
如果插入发生在序列的开始或结束处,则不会访问所包含的元素(尽管参见上面的迭代器有效性)。
如果它发生在其他地方,同时访问元素是不安全的。
异常安全
如果操作在begin或end处插入单个元素,则在异常情况下容器中不存在任何更改(强保证)。
否则,保证容器以有效状态结束(基本保证)。
如果元素结构的适当实参不支持allocator_traits::construct,或者指定了无效的position或范围,则会导致未定义的行为。



![[附源码]计算机毕业设计JAVA个性化新闻推荐系统](https://img-blog.csdnimg.cn/2e0dea7cabd0413fa13609233dbd31de.png)















