te 38 inline void mtree::pre_iterator_impl::increment(reverse_tag) 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::pre_iterator_impl::decrement(no_reverse_tag) 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::pre_iterator_impl::decrement(reverse_tag) 53 { 54 assert(tree_&&off_<=tree_->size()); 55 off_!=tree_->size() forward_next() : last(reverse_tag()); 56 }
四、使用示例 (1)正向遍历整颗树,代码如下:
1 mtree mt; 2 mtree::iterator_base root = mt.get_root(); 3 mtree::pre_iterator it = root; 4 mtree::pre_iterator last = --it.end(); 5 for (it = it.begin();it!=it.end();++it) 6 { 7 cout << *it; 8 if (it!=last) 9 cout <<" "; 10 } (2)反向遍历整颗树 ,代码如下:
1 mtree mt; 2 mtree::iterator_base root = mt.get_root(); 3 mtree::reverse_pre_iterator r_it = root; 4 mtree::reverse_pre_iterator r_last = --r_it.end(); 5 for (r_it = r_it.begin();r_it!=r_it.end();++r_it) 6 { 7 cout << *r_it; 8 if (r_it!=r_last) 9 cout <<" "; 10 }
|