1 template
2 template
3 inline void mtree
4 {
5 assert(tree_&&root_<=tree_->size());
6 if (root_!=tree_->size())
7 forward_first();
8 else
9 off_ = 0;
10 }
11 template
12 template
13 inline void mtree
14 {
15 assert(tree_&&root_<=tree_->size());
16 if (root_!=tree_->size())
17 forward_last();
18 else
19 off_ = 0;
20 }
21 template
22 template
23 inline void mtree
24 {
25 assert(tree_&&root_<=tree_->size());
26 if (root_!=tree_->size())
27 forward_last();
28 else
29 off_ = 0;
30 }
31 template
32 template
33 inline void mtree
34 {
35 assert(tree_&&root_<=tree_->size());
36 if (root_!=tree_->size())
37 forward_first();
38 else
39 off_ = 0;
40 }
41 template
42 template
43 inline void mtree
44 {
45 assert(tree_&&off_<=tree_->size());
46 off_!=tree_->size() forward_next() : first(no_reverse_tag());
47 }
48 template
49 template
50 inline void mtree
51 {
52 assert(tree_&&off_<=tree_->size());
53 off_!=tree_->size() forward_prev() : first(reverse_tag());
54 }
55 template
56 template
57 inline void mtree
58 {
59 assert(tree_&&off_<=tree_->size());
60 off_!=tree_->size() forward_prev() : last(no_reverse_tag());
61 }
62 template
63 template
64 inline void mtree
65 {
66 assert(tree_&&off_<=tree_->size());
67 off_!=tree_->size() forward_next() : last(reverse_tag());
68 }
四、使用示例
(1)正向遍历某结点的兄弟,代码如下:
1 mtree
2 mtree
3 mtree
4 for (it = it.begin();it!=it.end();++it)
5 {
6 cout << *it;
7 if (it!=last)
8 cout <<" ";
9 }
(2)反向遍历某结点的兄弟,代码如下:
1 mtree
2 mtree
3 mtree
4 for (r_it = r_it.begin();r_it!=r_it.end();++r_it)
5 {
6 cout << *r_it;
7 if (r_it!=r_last)
8 cout <<" ";
9 }