2

ベクトル、リストなどの順次コンテナーを使用しようとすると、2 番目のデフォルト引数が次のように表示されます。

typename _Ax = allocator <_Ty> >

キューではなく、他の順次コンテナーで必要な理由を知りたいです。これの正確な目的は何ですか。

よろしくお願いします

4

2 に答える 2

5

(やのstd::queueような) は、コンテナーではなく、コンテナー アダプターです。取るテンプレート引数の 1 つはコンテナーです。std::priority_queuestd::stack

template<
     class T,
     class Container = std::deque<T>
  > class queue;

キューはそのコンテナーを内部で使用します。これは基本的にコンテナーのラッパーであり、キューのようなインターフェイスを提供します。

もちろん、コンテナー (std::dequeデフォルトでは ) にはアロケーター パラメーターがあり、キューは単なるラッパーであるため、明らかにコンテナーと同じアロケーターを使用します。そのため、キューのアロケーター パラメーターはコンテナー パラメーターで暗黙的に指定されます。

アロケーター パラメーターの目的は、ユーザーが目前のユース ケースに最適化されたメモリの割り当て/割り当て解除の方法 (場合によっては、構築/破棄の方法も) を定義できるようにすることです。標準アロケーターは、割り当てと割り当て解除が必要な場合は常にmallocand free(または同等のもの) を実行しますが、これは特定のシナリオでは望ましくない場合があります。カスタマイズされたアロケーター ( Boost プール アロケーターなど) を渡すと、効率が向上するか、別の方法で役立つ場合があります。

于 2013-06-28T11:48:42.340 に答える