4

次のようなものがあるとします。

class Collection
{
private:
    typedef std::vector< std::shared_ptr<Something> >::iterator Iterator;
    std::vector< std::shared_ptr<Something> > data_;

public:
    Iterator begin() {return data_.begin()}
    Iterator end()  {return data_.end()}
}

Collection::Iteratorインスタンスを使用するときは、一度逆参照してオブジェクトを取得し、std::shared_ptr<Something>もう一度オブジェクトを取得する必要がありSomethingます。

std::shared_ptr<Something>しかし、実装の詳細だけを作成したい場合は、逆参照を 1 回行った後、Somethingオブジェクトを取得する必要があります。

あれは:

Collection collection;
Collection::Iterator it = collection.begin();
Something firstMember = *it;  // instead of the current **it;

私の質問は、Iterator をCollectionゼロからネストされたクラスとして作成し、ここからランダム アクセス イテレータに必要なすべての関数を実装する必要があるかどうかですhttp://www.cplusplus.com/reference/std/iterator/いくつかのよく知られたアプローチ?もしかしてC++11?

4

1 に答える 1

10

実装しているものが存在し、と呼ばれているようですboost::ptr_vector。Boostは、苦痛の少ないイテレータを実装するためのライブラリも提供します。あなたが探しているものはboost::indirect_iterator

于 2012-07-09T04:20:03.473 に答える