如何有效地将一系列值插入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);
.
插入呢?
与向量不同,双端队列的存储永远不会在添加新元素时重新分配。这意味着永远不必移动现有元素。所以提前预定没有任何好处。
我有一些 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);
.
与向量不同,双端队列的存储永远不会在添加新元素时重新分配。这意味着永远不必移动现有元素。所以提前预定没有任何好处。