2012-01-22 11 views
3

私は境界型のボリューム階層を格納するためにバイナリツリー構造を作成しました。これは、使いやすさと安全性を高めるために、幅優先と深さ優先の2つのイテレータを追加しました。過去のイテレータを作成する方法は?

幅優先イテレータは基本的に元のQListのラッパーです。しかし、深度優先イテレータ(双方向のみ)にはまっているので、ツリーの周りの実際の反復を処理できます。私はちょうど過去のイテレータを作成する方法がありません。

最下位の右端のノードもツリー全体の右端のノードであるという保証がないため、​​を使用することはできません。私は、さまざまなノード管理機構に偽のノードを無視させ、ツリー構築の自動化を無効にするために大きなコード変更(おそらくオーバーヘッド)が必要になるため、テストできる「偽の」BVHノードを作ることには消極的です(例えば、偽のノードの親はそれが葉であると言わなければならない)。しかし、これが唯一の方法なら、それは唯一の方法です。

+0

とコードは? 。 –

+0

私はこれがより構造的な問題であると想定しました。イテレータ、ツリー構築コンストラクト、およびBVHノード自体は、数百行のコードです。具体的に何を見たいですか? – cmannett85

+2

偽のノードを追加する場合は、実際にはツリーに接続する必要はなく、実際には(一部のコンテナでは)存在することさえあります。唯一の要件は、イテレータがイテレータを最後から最後まで、イテレータの_コードで実行できる必要があることです。 (構造によっては) –

答えて

0

qlist.hで簡単に見ても、両方の繰り返しタイプで同じend()を使用することはできません。しかし、それは問題ありません。ヌルポインタや静的なダミーなどのテクニックを使用して、2番目の反復メソッドのend()イテレータを作成できます。私はなぜこれが膨大な量の他のコードに影響を与えなければならないのかわかりません(ほとんどは実装の詳細を知らずにend()を参照するだけです)。

+0

ツリーの(可能な)形状のため、 'QList :: end()'イテレータを使用することはできません。私は偽のノードを適切に統合するためにノードのコードを変更する必要があると思ったが、Mooing Duckは何かにある。 – cmannett85

0

最後にnullなどを使用することはできませんか?これは、少なくとも私が期待するものです。リンクリスト構造の場合。

+0

いいえ、子リンクのNULLは葉ノードであることを意味します。覚えておいて、私は木構造について話しています - たくさんの「終わり」があります。 – cmannett85

関連する問題