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);
  }
}

これが の場合、ループに入る前にすべてのエントリを挿入するのに十分な大きさのコンテナstd::vectorを使用reserve()します。

std::vector<int> _recentSent;

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

しかし、1 つもないstd::dequeので、必要に応じて 1 回だけサイズ変更されるように一連のアイテムを に効率的に挿入するにはどうすればよいでしょうか?

4

2 に答える 2

4

ベクターとは異なり、deque のストレージは、新しい要素を追加しても再割り当てされません。つまり、既存の要素を移動する必要はありません。したがって、事前に予約するメリットはありません。

于 2015-01-04T00:42:21.913 に答える
0

がないのでstd::deque::reserve()、すべてのストレージを事前に割り当ててから、_recentSent.resize (_recentSent.size () + lastOffset + 1 - beginOffset)iterator を使用して挿入するのはどうですかstd::deque<int>::iterator it = _recentSent.end () - (lastOffset + 1 - beginOffset);

于 2015-01-04T00:31:57.687 に答える