我有一些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
,以便只在必要时重新调整一次?
答案 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);
插入。