55 }
56 template
57 template
58 inline typename mtree
59 mtree
60 {
61 post_iterator_impl
62 iter -= off;
63 return iter;
64 }
65 template
66 template
67 inline typename mtree
68 mtree
69 {
70 while (off)
71 {
72 if (base_type::is_null()) break;
73 --(*this); --off;
74 }
75 return *this;
76 }
77 template
78 template
79 inline typename mtree
80 mtree
81 {
82 post_iterator_impl
83 iter.first(typename reverse_trait
84 return iter;
85 }
86 template
87 template
88 inline typename mtree
89 mtree
90 {
91 post_iterator_impl
92 if (tree_)
93 {
94 iter.off_ = tree_->size();
95 }
96 return iter;
97 }
(7)间隔层定位方法的实现,代码如下:
1 template
2 template
3 inline void mtree
4 {
5 assert(tree_&&root_
6 forward_first();
7 }
8 template
9 template
10 inline void mtree
11 {
12 assert(tree_&&root_
13 forward_last();
14 }
16 template
17 inline void mtree
18 {
19 assert(tree_&&root_
20 forward_last();
21 }
22 template
23 template
24 inline void mtree
25 {
26 assert(tree_&&root_
27 forward_first();
28 }
29 template
30 template
31 inline void mtree
32 {
33 assert(tree_&&off_<=tree_->size());
34 off_!=tree_->size() forward_next() : first(no_reverse_tag());
35 }
36 template
37 template
38 inline void mtree
39 {
40 assert(tree_&&off_<=tree_->size());
41 off_!=tree_->size() forward_prev() : first(reverse_tag());
42 }
43 template
44 template
45 inline void mtree
46 {
47 assert(tree_&&off_<=tree_->size());
48 off_ !=tree_->size() forward_prev() : last(no_reverse_tag());
49 }
50 template
51 template
52 inline void mtree
53 {
54 assert(tree_&&off_<=tree_->size());
55 off_ !=tree_->size() forward_next() : last(reverse_tag());
56 }
四、使用示例
(1)正向遍历整颗树,代码如下:
1 mtree
2 mtree
3 mtree
4 mtree
5 for (it = it.begin();it!=it.end();++it)
6 {
7 cout << *it;
8 if (it!=last)
9 cout <<" ";
10 }
(2)反向遍历整颗树 ,代码如下:
1 mtree
2 mtree
3 mtree
4 mtree
5 for (r_it = r_it.begin();r_it!=r_it.end();++r