1

我有一些 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);
  }
}

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

std::vector<int> _recentSent;

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

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

4

2 回答 2

4

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

于 2015-01-04T00:42:21.913 回答
0

既然没有std::deque::reserve(),那么通过 iterator 预分配所有存储_recentSent.resize (_recentSent.size () + lastOffset + 1 - beginOffset)然后插入呢std::deque<int>::iterator it = _recentSent.end () - (lastOffset + 1 - beginOffset);

于 2015-01-04T00:31:57.687 回答