私が理解しているように、 deque は循環バッファーであり、スペースが不足すると、新しいスペースを割り当てます (可能な場合)。両端キューを制限する方法はありますか? または、最大サイズを超えないようにする唯一の方法は、デキューするデータを挿入するたびに確認することですか?
質問する
3202 次
4 に答える
2
はい、すべてのSTLコレクションと同様に、テンプレート化されたパラメーターの1つはアロケーターです。
したがって、メモリを追跡しbad_alloc
、メモリが使用可能であっても、この制限を超えた場合にスローする独自のカスタムアロケータを作成できます。
ちなみに、astd::deque
は通常、各ページに固定数の要素が含まれる「ページ」のコレクションとして実装されます。
「どこでも」挿入または削除できる循環バッファの実装が必要な場合はstd::deque
、使用するのが最も効率的ではありませstd::list
ん(ただし、ブーストで使用できる循環コレクションがあります)。
于 2012-10-22T09:19:38.177 に答える
1
deque
循環バッファではありません。これは通常、リンクされた配列のコレクションとして実装されます。循環バッファについてはcircular_buffer
、Boostを参照してください。
于 2012-10-22T09:20:32.777 に答える
1
私の経験では、最も簡単な方法は、ラッパー クラスで両端キューをカプセル化し、2 つのメンバー関数のラッピングpush_back
とpush_front
于 2012-10-22T09:55:04.460 に答える
0
両端キューは循環バッファーではありません。循環バッファとして実装される場合がありますが、実装の詳細はユーザーから隠されています。サイズチェックを行うラッパークラスまたは便利な関数を作成することをお勧めします。
于 2012-10-22T09:22:20.297 に答える