C++のSTLコンテナ内でtypedefを多用して、member typesを定義しているのはなぜですか？


C++のSTLコンテナ（上の例ではvector)は、なぜ内部でtypedefを多用しているのでしょうか。  
member typesをtypedefで新たに新しい型名として定義してしまうことによって、誤用の可能性が高まるのではないかと思いました。  
あえて別の型名で定義し直す理由を教えていただきたいです。

[code]

    template<class T, class Allocator = std::allocator<T> >
        class vector {
        public:
            /* member types */
            typedef T value_type;
            typedef Allocator allocator_type;
            typedef std::size_t size_type;
            typedef std::ptrdiff_t difference_ptr;
            typedef value_type &reference;
            typedef const value_type &const_reference;
            typedef typename Allocator::pointer pointer;
            typedef typename Allocator::const_pointer const_pointer;
            typedef pointer iterator;
            typedef const_pointer const_iterator;
            typedef ft::reverse_iterator<iterator> reverse_iterator;
            typedef ft::reverse_iterator<const_iterator> const_reverse_iterator;
    
[/code]




実行環境の事情に合わせて処理系 (に付属するライブラリ) は適切な型を選択できるようにするためです。

たとえばあなたが見た実装で `std::vector<T>::size_type` が `std::size_t`
なのはその環境ではそう実装しているに過ぎず、言語仕様でそうしなければならないと決まっているわけではありません。




実行環境の事情に合わせて処理系 (に付属するライブラリ) は適切な型を選択できるようにするためです。

たとえばあなたが見た実装で `std::vector<T>::size_type` が `std::size_t`
なのはその環境ではそう実装しているに過ぎず、言語仕様でそうしなければならないと決まっているわけではありません。

