これは、Cfooのユーザが内部を変更することなくコンテナを反復することを可能にするSTLコンテナのかなり通常のカプセル化です。カプセル化されたネストされたSTLコンテナを反復する
#include <vector>
class Cfoo
{
public:
class Cbar
{
/* contents of Cbar */
};
typedef std::vector<Cbar> TbarVector;
typedef TbarVector::const_iterator const_iterator;
public:
const_iterator begin() const { return(barVector_.begin()); }
const_iterator end() const { return(barVector_.end()); }
private:
TbarVector barVector_;
};
これまでのところ、とても良いです。
Cfoo myFoo;
for (Cfoo::const_iterator it = myFoo.begin(); it != myFoo.end(); ++it)
{
it->DoSomething();
}
は、今私は、ネストされたのstd ::ベクトル言うとはstd ::ベクトルを交換したい:私たちは、このようにコンテナを繰り返すことができ
public:
typedef std::vector<Cbar> TbarVectorInner;
typedef std::vector<TbarVectorInner> TbarVectorOuter;
private:
TbarVectorOuter barContainer_;
をしかし、私は反復処理することができるようにしたいです以前と同じ方法でCbarのすべてのインスタンスを作成し、const_iteratorとbegin()constメソッドとend()constメソッドを公開します。
私はカスタムイテレータを書くことが関係しているとは思うが、私はそれを行う方法がわからない。何かご意見は?
カスタムイテレータの作成が必要です。 –
http://tackoverflow.com/questions/3623082/flattening-iteratorからのFlattening Iteratorのようなサウンド – Cubbi
「TbarVector」はプライベートである必要があります。外部との関連性がなく、誤用されやすいことを外部に伝えます。 –