これまで、ツリー データ構造について多くの質問をしてきましたが、C++ での正しい方法を理解していなかったようです。
私がデータ構造を書いた方法では、「終了」または「開始」イテレータを持つ方法について 1 つの方法を考えることができませんでした。そのため、すべての機能をメンバー メソッドとして含めるアプローチに行きました。イテレータとアルゴリズムの標準的なアプローチを使用する代わりに。
現在、私のツリー構造の目標は次のとおりです。1) ブランチを 1 つのツリーから別のツリーにできるだけ早く移動します。2) 各ブランチはそれ自体がツリーである必要があります。また、ツリーで動作するアクションは、ブランチでも実行できる必要があります。
私が行ったことは、ベクトルを含むクラスを作成するだけです。- ベクター内には、このクラスの他のオブジェクトがあります。例 (現在直面している最大の問題は、クラスが大きすぎて処理できないことであるため、ここでは最小限の例のみを投稿しています):
template <typename ValTy>
class Tree {
private:
std::vector<std::unique_ptr<Tree> > subtrees;
ValTy value;
};
これでわかるように、何かを取り出しsubtrees
て、ツリーとして使用するか、コピーすることができます。ただし、最上位ツリーにはサブツリーの数 (またはレベルの数) が示されていないため、「終了反復子」を述べるのは不可能ですか? std::find() のようなアルゴリズムは、ツリー全体 (およびそのすべてのサブツリー) を反復処理しませんか?
簡単な「分岐」の構造を維持しながら、これらのアルゴリズムを利用できるようにすることは可能ですか?