У меня есть код 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
чтобы его размер был изменен только один раз, если это необходимо?
В отличие от вектора, хранилище для deque никогда не перераспределяется при добавлении новых элементов. Это означает, что существующие элементы никогда не нужно перемещать. Таким образом, резервирование заблаговременно не имеет смысла.
Так как нет std::deque::reserve()
что насчет предварительного распределения всего хранилища _recentSent.resize (_recentSent.size () + lastOffset + 1 - beginOffset)
а затем вставка с использованием итератора std::deque<int>::iterator it = _recentSent.end () - (lastOffset + 1 - beginOffset);
,