範囲ベースのforループを使用できるように、バイナリツリー上にイテレータを作成したいと思います。最初にbegin()関数とend()関数を実装する必要があることを理解しています。
Beginはおそらくルートを指しているはずです。ただし、仕様によれば、end()関数は「最後の有効な要素に続く要素」を返します。それはどの要素(ノード)ですか?「無効な」場所を指すことは違法ではないでしょうか。
もう1つはoperator++です。ツリーの「次の」要素を返すための最良の方法は何ですか?このプログラミングを始めるには、アドバイスが必要です。
質問を拡張/拡張したいと思います*。任意のアリティを持つツリーを反復処理したい場合はどうなりますか?各ノードに子のベクトルを持たせ、begin()が「実際の」ルートを指すようにします。おそらく、unique_ptrをノードに格納するために、イテレータクラス内に(幅優先の)キューを実装する必要がありますよね?次に、キューが空の場合、すべてのノードを通過したことがわかります。したがって、oprator ++()が呼び出されたときにTreeIterator(nullptr)を返す必要があります。それは意味がありますか?私はそれをできるだけ単純にし、前方反復のみを望んでいます。
*または、新しいスレッドを作成する必要がありますか?