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

std::

deque::emplace

公众成员函数  <deque>
template <class... Args>
  iterator emplace (const_iterator position, Args&&... args);
构造和插入元素
通过在position插入新元素扩展容器。这个新元素使用args作为其构造的参数构造。

容器大小加1.

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

请参阅emplace_front和emplace_back,了解直接在容器开头或结尾扩展的成员函数。

元素是通过调用allocator_traits::construct和转发的参数构造的。

☲  参数


position
容器中插入新元素的位置。
成员类型const_iterator是指向常量元素的随机访问迭代器类型。
args
为构造新元素而传递的参数。

☉  返回值



指向新放置的元素的迭代器。
成员类型迭代器是一种指向元素的随机访问迭代器类型。
新元素的存储是使用allocator_traits<allocator_type>::construct()分配的,如果失败, 可能会抛出异常(对于默认的分配器,如果分配请求不成功,会抛出bad_alloc)。

☣  示例



// deque::emplace
#include <iostream>
#include <deque>

int main ()
{
  std::deque<int> mydeque = {10,20,30};

  auto it = mydeque.emplace ( mydeque.begin()+1, 100 );
  mydeque.emplace ( it, 200 );
  mydeque.emplace ( mydeque.end(), 300 );

  std::cout << "mydeque contains:";
  for (auto& x: mydeque)
    std::cout << ' ' << x;
  std::cout << '\n';

  return 0;
}

输出:
mydeque contains: 10 200 100 20 30 300

✥ 复杂度



根据特定的标准库实现,在位置和deque的一个端点之间的元素数量最多为线性。

☣ 迭代器的有效性



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

⇄ 数据竞争


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

☂ 异常安全性



如果位置是开始或结束,则在异常情况下容器中没有变化(强保证)。
否则,容器将保证以有效状态结束(基本保证)。
如果相应的参数不支持allocator_traits::construct,或者如果position无效,它将导致未定义的行为。

🍄  另请参阅



deque::erase 删除元素(公众成员函数)
deque::emplace_front 构造并在开头插入元素 (公众成员函数)
deque::emplace_back 构造并在末尾插入元素 (公众成员函数)
deque::assign 分配容器的内容 (公众成员函数)
deque::insert 插入元素 (公众成员函数)

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