0

私が理解しているように、 deque は循環バッファーであり、スペースが不足すると、新しいスペースを割り当てます (可能な場合)。両端キューを制限する方法はありますか? または、最大サイズを超えないようにする唯一の方法は、デキューするデータを挿入するたびに確認することですか?

4

4 に答える 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_backpush_front

于 2012-10-22T09:55:04.460 に答える
0

両端キューは循環バッファーではありません。循環バッファとして実装される場合がありますが、実装の詳細はユーザーから隠されています。サイズチェックを行うラッパークラスまたは便利な関数を作成することをお勧めします。

于 2012-10-22T09:22:20.297 に答える