亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tree.hh

?? 一個德國人Kasper Peeters用C++ template寫的tree的STL實現
?? HH
?? 第 1 頁 / 共 5 頁
字號:
   // take src out of the tree   if(src->prev_sibling!=0) src->prev_sibling->next_sibling=src->next_sibling;   else                     src->parent->first_child=src->next_sibling;   if(src->next_sibling!=0) src->next_sibling->prev_sibling=src->prev_sibling;   else                     src->parent->last_child=src->prev_sibling;   // connect it to the new point   if(dst_prev_sibling!=0) dst_prev_sibling->next_sibling=src;   else                    target.parent_->first_child=src;   src->prev_sibling=dst_prev_sibling;   if(dst) {      dst->prev_sibling=src;      src->parent=dst->parent;      }   src->next_sibling=dst;   return src;   }template <class T, class tree_node_allocator>template <typename iter> iter tree<T, tree_node_allocator>::move_ontop(iter target, iter source)   {   tree_node *dst=target.node;   tree_node *src=source.node;   assert(dst);   assert(src);   if(dst==src) return source;   // remember connection points   tree_node *b_prev_sibling=dst->prev_sibling;   tree_node *b_next_sibling=dst->next_sibling;   tree_node *b_parent=dst->parent;   // remove target   erase(target);   // take src out of the tree   if(src->prev_sibling!=0) src->prev_sibling->next_sibling=src->next_sibling;   else                     src->parent->first_child=src->next_sibling;   if(src->next_sibling!=0) src->next_sibling->prev_sibling=src->prev_sibling;   else                     src->parent->last_child=src->prev_sibling;   // connect it to the new point   if(b_prev_sibling!=0) b_prev_sibling->next_sibling=src;   else                  b_parent->first_child=src;   if(b_next_sibling!=0) b_next_sibling->prev_sibling=src;   else                  b_parent->last_child=src;   src->prev_sibling=b_prev_sibling;   src->next_sibling=b_next_sibling;   src->parent=b_parent;   return src;   }template <class T, class tree_node_allocator>void tree<T, tree_node_allocator>::merge(sibling_iterator to1,   sibling_iterator to2,                                          sibling_iterator from1, sibling_iterator from2,                                          bool duplicate_leaves)   {   sibling_iterator fnd;   while(from1!=from2) {      if((fnd=std::find(to1, to2, (*from1))) != to2) { // element found         if(from1.begin()==from1.end()) { // full depth reached            if(duplicate_leaves)               append_child(parent(to1), (*from1));            }         else { // descend further            merge(fnd.begin(), fnd.end(), from1.begin(), from1.end(), duplicate_leaves);            }         }      else { // element missing         insert_subtree(to2, from1);         }      ++from1;      }   }template <class T, class tree_node_allocator>void tree<T, tree_node_allocator>::sort(sibling_iterator from, sibling_iterator to, bool deep)   {   std::less<T> comp;   sort(from, to, comp, deep);   }template <class T, class tree_node_allocator>template <class StrictWeakOrdering>void tree<T, tree_node_allocator>::sort(sibling_iterator from, sibling_iterator to,                                         StrictWeakOrdering comp, bool deep)   {   if(from==to) return;   // make list of sorted nodes   // CHECK: if multiset stores equivalent nodes in the order in which they   // are inserted, then this routine should be called 'stable_sort'.   std::multiset<tree_node *, compare_nodes<StrictWeakOrdering> > nodes(comp);   sibling_iterator it=from, it2=to;   while(it != to) {      nodes.insert(it.node);      ++it;      }   // reassemble   --it2;   // prev and next are the nodes before and after the sorted range   tree_node *prev=from.node->prev_sibling;   tree_node *next=it2.node->next_sibling;   typename std::multiset<tree_node *, compare_nodes<StrictWeakOrdering> >::iterator nit=nodes.begin(), eit=nodes.end();   if(prev==0) {      if((*nit)->parent!=0) // to catch "sorting the head" situations, when there is no parent         (*nit)->parent->first_child=(*nit);      }   else prev->next_sibling=(*nit);   --eit;   while(nit!=eit) {      (*nit)->prev_sibling=prev;      if(prev)         prev->next_sibling=(*nit);      prev=(*nit);      ++nit;      }   // prev now points to the last-but-one node in the sorted range   if(prev)      prev->next_sibling=(*eit);   // eit points to the last node in the sorted range.   (*eit)->next_sibling=next;   (*eit)->prev_sibling=prev; // missed in the loop above   if(next==0) {      if((*eit)->parent!=0) // to catch "sorting the head" situations, when there is no parent         (*eit)->parent->last_child=(*eit);      }   else next->prev_sibling=(*eit);   if(deep) {  // sort the children of each node too      sibling_iterator bcs(*nodes.begin());      sibling_iterator ecs(*eit);      ++ecs;      while(bcs!=ecs) {         sort(begin(bcs), end(bcs), comp, deep);         ++bcs;         }      }   }template <class T, class tree_node_allocator>template <typename iter>bool tree<T, tree_node_allocator>::equal(const iter& one_, const iter& two, const iter& three_) const   {   std::equal_to<T> comp;   return equal(one_, two, three_, comp);   }template <class T, class tree_node_allocator>template <typename iter>bool tree<T, tree_node_allocator>::equal_subtree(const iter& one_, const iter& two_) const   {   std::equal_to<T> comp;   return equal_subtree(one_, two_, comp);   }template <class T, class tree_node_allocator>template <typename iter, class BinaryPredicate>bool tree<T, tree_node_allocator>::equal(const iter& one_, const iter& two, const iter& three_, BinaryPredicate fun) const   {   pre_order_iterator one(one_), three(three_);// if(one==two && is_valid(three) && three.number_of_children()!=0)//    return false;   while(one!=two && is_valid(three)) {      if(!fun(*one,*three))         return false;      if(one.number_of_children()!=three.number_of_children())          return false;      ++one;      ++three;      }   return true;   }template <class T, class tree_node_allocator>template <typename iter, class BinaryPredicate>bool tree<T, tree_node_allocator>::equal_subtree(const iter& one_, const iter& two_, BinaryPredicate fun) const   {   pre_order_iterator one(one_), two(two_);   if(!fun(*one,*two)) return false;   if(number_of_children(one)!=number_of_children(two)) return false;   return equal(begin(one),end(one),begin(two),fun);   }template <class T, class tree_node_allocator>tree<T, tree_node_allocator> tree<T, tree_node_allocator>::subtree(sibling_iterator from, sibling_iterator to) const   {   tree tmp;   tmp.set_head(value_type());   tmp.replace(tmp.begin(), tmp.end(), from, to);   return tmp;   }template <class T, class tree_node_allocator>void tree<T, tree_node_allocator>::subtree(tree& tmp, sibling_iterator from, sibling_iterator to) const   {   tmp.set_head(value_type());   tmp.replace(tmp.begin(), tmp.end(), from, to);   }template <class T, class tree_node_allocator>int tree<T, tree_node_allocator>::size() const   {   int i=0;   pre_order_iterator it=begin(), eit=end();   while(it!=eit) {      ++i;      ++it;      }   return i;   }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::empty() const   {   pre_order_iterator it=begin(), eit=end();   return (it==eit);   }template <class T, class tree_node_allocator>int tree<T, tree_node_allocator>::depth(const iterator_base& it) const   {   tree_node* pos=it.node;   assert(pos!=0);   int ret=0;   while(pos->parent!=0) {      pos=pos->parent;      ++ret;      }   return ret;   }template <class T, class tree_node_allocator>unsigned int tree<T, tree_node_allocator>::number_of_children(const iterator_base& it)    {   tree_node *pos=it.node->first_child;   if(pos==0) return 0;      unsigned int ret=1;//   while(pos!=it.node->last_child) {//      ++ret;//      pos=pos->next_sibling;//      }   while((pos=pos->next_sibling))      ++ret;   return ret;   }template <class T, class tree_node_allocator>unsigned int tree<T, tree_node_allocator>::number_of_siblings(const iterator_base& it) const   {   tree_node *pos=it.node;   unsigned int ret=0;   while(pos->next_sibling &&          pos->next_sibling!=head &&         pos->next_sibling!=feet) {      ++ret;      pos=pos->next_sibling;      }   return ret;   }template <class T, class tree_node_allocator>void tree<T, tree_node_allocator>::swap(sibling_iterator it)   {   tree_node *nxt=it.node->next_sibling;   if(nxt) {      if(it.node->prev_sibling)         it.node->prev_sibling->next_sibling=nxt;      else         it.node->parent->first_child=nxt;      nxt->prev_sibling=it.node->prev_sibling;      tree_node *nxtnxt=nxt->next_sibling;      if(nxtnxt)         nxtnxt->prev_sibling=it.node;      else         it.node->parent->last_child=it.node;      nxt->next_sibling=it.node;      it.node->prev_sibling=nxt;      it.node->next_sibling=nxtnxt;      }   }// template <class BinaryPredicate>// tree<T, tree_node_allocator>::iterator tree<T, tree_node_allocator>::find_subtree(//    sibling_iterator subfrom, sibling_iterator subto, iterator from, iterator to, //    BinaryPredicate fun) const//    {//    assert(1==0); // this routine is not finished yet.//    while(from!=to) {//       if(fun(*subfrom, *from)) {//          //          }//       }//    return to;//    }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::is_in_subtree(const iterator_base& it, const iterator_base& begin,                                                  const iterator_base& end) const   {   // FIXME: this should be optimised.   pre_order_iterator tmp=begin;   while(tmp!=end) {      if(tmp==it) return true;      ++tmp;      }   return false;   }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::is_valid(const iterator_base& it) const   {   if(it.node==0 || it.node==feet) return false;   else return true;   }template <class T, class tree_node_allocator>unsigned int tree<T, tree_node_allocator>::index(sibling_iterator it) const   {   unsigned int ind=0;   if(it.node->parent==0) {      while(it.node->prev_sibling!=head) {         it.node=it.node->prev_sibling;         ++ind;         }      }   else {      while(it.node->prev_sibling!=0) {         it.node=it.node->prev_sibling;         ++ind;         }      }   return ind;   }template <class T, class tree_node_allocator>typename tree<T, tree_node_allocator>::sibling_iterator tree<T, tree_node_allocator>::child(const iterator_base& it, unsigned int num) const   {   tree_node *tmp=it.node->first_child;   while(num--) {      assert(tmp!=0);      tmp=tmp->next_sibling;      }   return tmp;   }// Iterator basetemplate <class T, class tree_node_allocator>tree<T, tree_node_allocator>::iterator_base::iterator_base()   : node(0), skip_current_children_(false)   {   }template <class T, class tree_node_allocator>tree<T, tree_node_allocator>::iterator_base::iterator_base(tree_node *tn)   : node(tn), skip_current_children_(false)   {   }template <class T, class tree_node_allocator>T& tree<T, tree_node_allocator>::iterator_base::operator*() const   {   return node->data;   }template <class T, class tree_node_allocator>T* tree<T, tree_node_allocator>::iterator_base::operator->() const   {   return &(node->data);   }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::post_order_iterator::operator!=(const post_order_iterator& other) const   {   if(other.node!=this->node) return true;   else return false;   }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::post_order_iterator::operator==(const post_order_iterator& other) const   {   if(other.node==this->node) return true;   else return false;   }template <class T, class tree_node_allocator>bool tree<T, tree_node_allocator>::pre_order_iterator::operator!=(const pre_order_iterator& other) const   {   if(other.node!=this->node) return true;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区日韩精品欧美| 一区二区三区精品在线观看| 青青草国产精品97视觉盛宴| 欧美一区永久视频免费观看| 免费在线观看成人| ww久久中文字幕| 成人国产精品免费| 亚洲激情av在线| 3d动漫精品啪啪1区2区免费| 久久激情五月婷婷| 欧美国产一区二区| 色噜噜狠狠成人中文综合| 亚洲大片一区二区三区| 日韩女优制服丝袜电影| a级精品国产片在线观看| 亚洲欧美二区三区| 日韩欧美国产电影| 成人av手机在线观看| 亚洲主播在线观看| 久久久欧美精品sm网站| aaa亚洲精品| 日韩高清不卡一区二区| 国产日韩欧美精品综合| 欧美亚洲丝袜传媒另类| 久久电影国产免费久久电影| 国产精品久久久久久亚洲毛片| 欧美一区二区播放| 亚洲视频一区二区免费在线观看 | 久久久久久麻豆| 国产精品丝袜久久久久久app| 亚洲综合999| 九九视频精品免费| 99久久国产综合精品色伊| 91国模大尺度私拍在线视频| 国产精品网站在线播放| 欧美精品日韩一区| 综合欧美一区二区三区| 91精品国产综合久久久久| 国产精品亚洲第一| 婷婷成人综合网| 中文字幕一区二区三区不卡| 正在播放亚洲一区| 91麻豆免费看片| 国产一区欧美一区| 日韩在线卡一卡二| 亚洲女同女同女同女同女同69| 精品国产一区a| 欧美日韩日日摸| 99久久精品国产导航| 狠狠色狠狠色综合| 日韩综合小视频| 一区二区三区在线视频观看| 国产偷国产偷精品高清尤物| 91麻豆精品国产| 欧美三级中文字幕在线观看| www.99精品| 国产精品一色哟哟哟| 另类人妖一区二区av| 亚洲成人动漫在线观看| 怡红院av一区二区三区| 国产精品嫩草影院av蜜臀| 精品国产亚洲在线| 欧美成人一区二区三区| 欧美精品vⅰdeose4hd| 色8久久精品久久久久久蜜| av中文字幕亚洲| www.亚洲色图.com| 99精品欧美一区二区三区小说 | 777xxx欧美| 欧美性大战久久| 在线观看亚洲成人| 91精品91久久久中77777| 91在线观看地址| 色网综合在线观看| 69av一区二区三区| 91同城在线观看| 91视频xxxx| 久久精品国产久精国产| 欧美激情在线免费观看| 日韩免费视频线观看| 日韩欧美一区在线| 国产酒店精品激情| 精品一二线国产| 亚洲电影在线免费观看| 国产精品久线观看视频| 亚洲综合图片区| 欧美精品第1页| 在线不卡中文字幕| 91麻豆精品国产91久久久使用方法 | 欧美影院午夜播放| 欧美三级中文字幕| 日韩午夜激情av| 日韩美一区二区三区| 精品久久国产97色综合| 久久精品亚洲乱码伦伦中文| 国产精品日韩成人| 亚洲国产一区二区a毛片| 午夜精品福利视频网站| 人禽交欧美网站| 国产在线精品一区在线观看麻豆| 丁香婷婷综合激情五月色| 91久久线看在观草草青青| 欧美一区二区三区电影| 国产亚洲成年网址在线观看| 一区精品在线播放| 亚洲va欧美va国产va天堂影院| 久久精品国产99久久6| 成人美女在线视频| 欧美午夜寂寞影院| 欧美videos中文字幕| 亚洲国产成人私人影院tom| 一个色在线综合| 精品亚洲成a人| 91看片淫黄大片一级在线观看| 精品婷婷伊人一区三区三| 久久久五月婷婷| 无吗不卡中文字幕| 国产精品乡下勾搭老头1| 欧美区一区二区三区| 国产欧美一区视频| 日韩高清欧美激情| 99re热这里只有精品视频| 精品福利在线导航| 亚洲一二三四区不卡| 国产激情精品久久久第一区二区| 色av成人天堂桃色av| 欧美激情中文不卡| 久久精品999| 欧美日韩国产首页在线观看| 亚洲欧美综合色| 一区二区三区四区五区视频在线观看| 亚洲久草在线视频| 国产亚洲一二三区| 天天做天天摸天天爽国产一区| 老司机精品视频线观看86| 色综合中文字幕| 久久精品亚洲麻豆av一区二区| 国产精品一区免费视频| 国产精品18久久久| 亚洲精品一区二区三区福利| 一区二区三区四区激情| 国产91丝袜在线18| 亚洲视频电影在线| 精品乱人伦小说| 亚洲成人免费视| 91免费版在线| 久久影院午夜片一区| 丝袜美腿高跟呻吟高潮一区| 色综合久久中文字幕| 国产精品对白交换视频| 狠狠色丁香婷综合久久| 91精品国产综合久久香蕉的特点 | 日韩欧美另类在线| 午夜精品视频在线观看| 91黄色在线观看| 国产精品久久久久久久久搜平片 | 成人av在线一区二区三区| 久久综合久久综合久久综合| 视频在线观看一区| 欧美天堂亚洲电影院在线播放| 中文字幕在线观看一区二区| 国产99精品视频| 国产亚洲短视频| 成人高清伦理免费影院在线观看| 国产欧美一区二区三区鸳鸯浴| 国产伦理精品不卡| 国产日韩欧美亚洲| 国产精品资源站在线| 国产午夜亚洲精品午夜鲁丝片| 国产一区亚洲一区| 中文一区二区完整视频在线观看| 精东粉嫩av免费一区二区三区| 久久婷婷国产综合精品青草| 国内精品久久久久影院色| 久久久久一区二区三区四区| 国产成人aaaa| 中文字幕一区二区在线观看| 91蝌蚪国产九色| 亚洲a一区二区| 欧美成人r级一区二区三区| 久草热8精品视频在线观看| 精品成人一区二区三区四区| 国产精品一二一区| 亚洲男人的天堂av| 欧美日韩一区二区三区在线| 奇米777欧美一区二区| 久久免费看少妇高潮| 99久久综合精品| 精品久久久影院| 欧美放荡的少妇| 一级做a爱片久久| 亚洲成在人线在线播放| 国产精品久久久久久亚洲伦 | 欧美精品久久99| caoporm超碰国产精品| 国产精品综合一区二区三区| 久久黄色级2电影| 久久精品99久久久| 极品少妇一区二区| 欧美视频一区二区在线观看|