std::vector<T>::iterator
は、 "iterator"という名前のstd::vector<T>
クラスに何かがあることを意味します。
template<typename T> class vector {
public:
typedef {{something}} iterator;
};
:それはtypedefをすることができた(注:この質問の目的のために、私はAllocator
テンプレートパラメータを無視してよ、それは関連はありません)。
または、完全な内部クラスである可能性があります。
これは他にもいくつかあります。どのような場合でも問題ありません。あなたが保証するのは、std::vector<T>::iterator
を参照すると、イテレータの要件を満たすものが得られるということだけです。
コンテナの場合、コンテナのイテレータを自由に実装して、正しい結果を得ることができます。
ただし、カスタムイテレータのために、あなたは彼らがC++ライブラリとスムーズに相互運用できるようにしている場合std::iterator
は自動的に、すべてのイテレータを持っている必要がありますいくつかのことを宣言しますので、それは便利、properly inherit from std::iterator
にあなたのイテレータを持っています。
最後に、「実際にどのように構築されるのか」という限りでは、実際にはどのような方法でも構築できます。明示的にイテレータを構築しないでください。具体的には、begin()
、end()
、またはfind()
を使用するか、...イテレータをどのように構築する必要があるのかをコンテナだけが気にします。パブリックコンストラクタ、またはプライベートコンストラクタです。これはコンテナに完全に対応しています。