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

时间:2015-01-04 00:20:10

标签: c++ deque c++03 capacity

我有一些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,以便只在必要时重新调整一次?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

由于没有std::deque::reserve(),如何通过_recentSent.resize (_recentSent.size () + lastOffset + 1 - beginOffset)预先分配所有存储,然后使用迭代器std::deque<int>::iterator it = _recentSent.end () - (lastOffset + 1 - beginOffset);插入。