回答:
標準コンテナは、定義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_typeQtコンテナのバージョンがバージョンに依存していることがわかります。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 ++を一目見ただけでも、これに似たものは何もありません。