2

私は、固定容量 (コンストラクターの呼び出しによって実行時に修正され、サイズ変更メソッドなし) のカスタム循環バッファー実装を作成しており、STL 互換にしたいと考えています。私の目標は、これをRandom Access Containerにすることです。さらに、 Back Insertion Sequenceの特定のインターフェイスが必要ですが、シーケンスではありません(サイズ変更や任意の位置での挿入/消去はありません...)。したがって、これは拡張されたランダム アクセス コンテナーにすぎません。max_size()size( )に関するいくつかの質問を読んだ後、私はまだ少し混乱しています。

私の現在の考え: size() : バッファに含まれる要素の数
max_size() : バッファの容量 (保持できる要素の最大数)

これは正しいですか(規格/STLに準拠していますか)?または、(std::)array with size() == max_size() のように処理する必要がありますか?

4

2 に答える 2

4

max_size()標準は、C++11 の表 96の意味について非常に明確です。

distance(begin(), end())可能な限り最大のコンテナ

のようstd::arrayに、サイズがコンテナー タイプのプロパティである場合 (たとえば、テンプレート パラメーターで指定)、それは と同じである必要がありますsize()。同じ型をさまざまなサイズでインスタンス化できる場合は、許容される最大サイズにする必要があります。

標準コンテナの例に倣い、capacity()容量を表示する機能があります。

于 2012-12-14T12:00:02.357 に答える
3

max_sizeコンテナ タイプの特定のインスタンスには関係ありません。size_typeこれは、型が処理できる最大サイズであり、実装の詳細によって制限されます (他に何もない場合の最大値)。

vector現在使用されていないスペースを予約できるため、capacity()機能があります。ただし、他のコンテナー ( dequelist) はスペースを予約しないため、これはコンテナーの概念の一部ではありません。

于 2012-12-14T11:58:53.450 に答える