回答:
標準コンテナは、定義size_type
へのtypedefようにAllocator::size_type
するため(アロケータは、テンプレートパラメータである)std::allocator<T>::size_type
されている典型的であると定義されるsize_t
(または互換性のあるタイプ)。したがって、標準的なケースでは、それらは同じです。
ただし、カスタムアロケーターを使用する場合は、異なる基になる型を使用できます。したがってcontainer::size_type
、一般性を最大化するために推奨されます。
size_t
これらの制約の実用的な実装が賭けられました。ただし、C ++ 11では、std::make_unsigned<X::difference_type>::type
デフォルトで次のように定義されています。実際には、おそらくと同じか互換性がありsize_t
ます。
size_type
廃止予定を示唆するものは何もありません。何ができますか?
size_t
オブジェクトのサイズに使用されるタイプとして定義され、プラットフォームに依存します。container::size_type
は、コンテナ内の要素の数に使用されるタイプであり、コンテナに依存します。すべてのstd
コンテナがsize_t
として使用されますがsize_type
、各独立したライブラリベンダーは、そのコンテナに適したタイプを選択します。
あなたが見れば qt、size_type
Qtコンテナのバージョンがバージョンに依存していることがわかります。Qt3ではそれがunsigned int
あり、Qt4ではそれがに変更されましたint
。
int
のではなくssize_t
、int
小さなの一種です。
の場合std::[w]string
、std::[w]string::size_type
はに等しい。std::allocator<T>::size_type
これはに等しいstd::size_t
。他のコンテナーの場合、これは実装で定義された符号なし整数型です。
正確な型があると便利な場合があります。たとえば、型をどこにラップするか(など)を知っておくと、その型UINT_MAX
を利用できるようになります。または、テンプレートの場合、2つの同じ型を関数/クラステンプレートに渡す必要があります。
しばしば私はsize_t
とにかく簡潔またはイテレータのために使用します。一般的なコードでは、テンプレートが使用されるコンテナーインスタンスとそれらのコンテナーのサイズがわからないためContainer::size_type
、コンテナーのサイズを格納する必要がある場合はtypedef を使用する必要があります。
N1804
と私は間の任意の関係が表示されないAllocator::size_type
としますsize_type
。libstdc ++を一目見ただけでも、これに似たものは何もありません。