如何有效地将一系列值插入std::deque?

How to efficiently insert a series of values into a std::deque?

我有一些 C++03 代码可以将一系列值插入 std::deque:

void example(std::deque<int> &_recentSent,
             const int beginOffset,
             const int lastOffset) {
  for (int offset = beginOffset; offset <= lastOffset; ++offset) {
    _recentSent.push_back(offset);
  }
}

如果这是 std::vector,我会使用 reserve() 来确保容器足够大,以便在进入循环之前插入所有条目:

std::vector<int> _recentSent;

_recentSent.reserve(_recentSent.size() + (lastOffset + 1 - beginOffset));

但是因为没有一个,我可以做些什么来有效地将一系列项目插入 std::deque 以便在必要时只调整一次大小?

既然没有std::deque::reserve(),那么通过_recentSent.resize (_recentSent.size () + lastOffset + 1 - beginOffset)预分配所有存储空间,然后使用迭代器std::deque<int>::iterator it = _recentSent.end () - (lastOffset + 1 - beginOffset);.

插入呢?

与向量不同,双端队列的存储永远不会在添加新元素时重新分配。这意味着永远不必移动现有元素。所以提前预定没有任何好处。