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

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

?? tree.h

?? CAN__組建現場總線系統設計技術(光盤)
?? H
?? 第 1 頁 / 共 3 頁
字號:
			while(num>0) {
				--(*this);
				--num;
			}
			return (*this);
		}
		sibling_iterator   operator+(int num) const{
			sibling_iterator ret(*this);
			while(num>0) {
				++ret;
				--num;
				}
			return ret;
		}
	//****************** 獲取數據 ******************************
		T& operator*(void) const{
			return node->data;
		}

		T* operator->(void) const{
			return &(node->data);
		}

	//***************** 比較兩個iterator是否指向相同的節點 ******
		bool operator==(const sibling_iterator& other) const{
			return (other.node == node);
		}

	//***************** 比較兩個iterator是否指向不同的節點 ******
		bool  operator!=(const sibling_iterator& other) const{
			return (other.node != node);
		}



	//************** 其他 *************************************

		// 是否指向一個結點?
		bool is_valid() const{
			return (node != 0);
		}

		// 當前兄弟節點鏈表中的第一個
		tree_node *range_first() const
		{
			tree_node *tmp=parent_->first_child;
			return tmp;
		}

		// 當前兄弟節點鏈表中的最后一個
		tree_node *range_last() const{
			return parent_->last_child;
		}

	//************** 數據 ********************************
		tree_node *node;//指向當前節點

	private:

		//設置parent_指向node的父結點
		void set_parent_()
		{
			parent_=0;
			if(node==0) return;
			if(node->parent!=0)
				parent_=node->parent;
		}
	public:
		tree_node *parent_;//指向父節點(在iterator中沒有)
	};
	//------------------------end of sibling_iterator------------------

	//------------------------continue tree----------------------------

	//********************** iterators *************************
	// begin/end of tree
	// begin() 得到的是第一棵樹的樹根。如果沒有樹,則指向head
	iterator begin() const{
		return iterator(head->next_sibling);
	}
	// end() 得到的是head
	iterator end() const{
		return iterator(head);
	}
	// begin/end of children of node
	// begin(it)得到子節點
	sibling_iterator begin(iterator pos) const{
		if(pos.node->first_child==0) {
			return end(pos);//begin(pos) == end(pos)表示沒有子節點
		}
//		return pos.node->first_child;//錯! comment by zychen
		return sibling_iterator(pos.node->first_child);
	}
	// pos指向的節點的最后一個子節點的后一個,node=0, parent_=pos.node
	sibling_iterator end(iterator pos) const{
		sibling_iterator ret(0);
		ret.parent_= pos.node;
		return ret;
	}

	//********************* 由當前iterator得到父,兄,弟iterator *********
	iterator parent(iterator position) const{
		assert(position.node!=0);
		return iterator(position.node->parent);
	}

	iterator previous_sibling(iterator position) const{
		assert(position.node!=0);
		return iterator(position.node->prev_sibling);
	}

	iterator next_sibling(iterator position) const{
		assert(position.node!=0);
		return iterator(position.node->next_sibling);
	}

	//******************* 樹的操作例程 **********************************

	//清除所有的樹。這些樹的root形成以head為頭的雙向循環鏈表,其中head不存樹
	void clear(){
		if(head)
			while(head->next_sibling!=head)
				erase(head->next_sibling);
	}

	// erase element at position pointed to by iterator, increment iterator
	// 刪除it及其子節點,重置it
	iterator erase(iterator it){
		tree_node *cur=it.node;
		assert(cur!=head);//不允許對head進行erase操作
		iterator ret=it;
		ret.skip_children();//設置skip_children_
		++ret;
		erase_children(it);
		if(cur->prev_sibling==0) {//sibling不是循環鏈表?
			cur->parent->first_child=cur->next_sibling;
		}
		else {
			cur->prev_sibling->next_sibling=cur->next_sibling;
		}
		if(cur->next_sibling==0) {
			cur->parent->last_child=cur->prev_sibling;
		}
		else {
			cur->next_sibling->prev_sibling=cur->prev_sibling;
		}

		destructor(&cur->data);
		alloc_.deallocate(cur,1);
		return ret;
	}
	// erase all children of the node pointed to by iterator
	//但不刪除it本身 it子節點將清空
	void erase_children(iterator it){
		tree_node *cur=it.node->first_child;
		tree_node *prev=0;

		while(cur!=0) {
			prev=cur;
			cur=cur->next_sibling;
			erase_children(prev);
			destructor(&prev->data);
			alloc_.deallocate(prev,1);
		}
		it.node->first_child=0;
		it.node->last_child=0;
	}

	// insert node as last child of node pointed to by position
	// 加入子節點(放到最后),但數據沒有給。返回這個子節點
	iterator append_child(iterator position){
		assert(position.node!=head);//不允許加入到head下

		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data);
		tmp->first_child=0;
		tmp->last_child=0;

		tmp->parent=position.node;
		if(position.node->last_child!=0) {
			position.node->last_child->next_sibling=tmp;
		}
		else {
			position.node->first_child=tmp;
		}
		tmp->prev_sibling=position.node->last_child;
		position.node->last_child=tmp;
		tmp->next_sibling=0;//可見sibling不是循環鏈表,first_child的prev_sibling和
						//last_child的next_sibling都是NULL
		return tmp;
	} 

	//和append_child(iterator position)基本一樣
	iterator append_child(iterator position, const T& x){
		// If your program fails here you probably used 'append_child' to add the top
		// node to an empty tree. From version 1.45 the top element should be added
		// using 'insert'. See the documentation for further information, and sorry about
		// the API change.
		assert(position.node!=head);

		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data, x);
		tmp->first_child=0;
		tmp->last_child=0;

		tmp->parent=position.node;
		if(position.node->last_child!=0) {
			position.node->last_child->next_sibling=tmp;
		}
		else {
			position.node->first_child=tmp;
		}
		tmp->prev_sibling=position.node->last_child;
		position.node->last_child=tmp;
		tmp->next_sibling=0;
		return tmp;
	}

	iterator append_child(iterator position, iterator other_position){
		assert(position.node!=head);

		sibling_iterator aargh=append_child(position, value_type());
		return replace(aargh, aargh+1, other_position, sibling_iterator(other_position)+1);
	}

	// short-hand to insert topmost node in otherwise empty tree
	// 如果還沒有創建任何樹,使用此函數將建立一棵樹
	iterator set_head(const T& x){
		assert(begin()==end());
		return insert(begin(), x);
	}

	// insert node as previous sibling of node pointed to by position
	//前插,作為position的兄弟節點
	iterator insert(iterator position, const T& x){
		//如果position.node==0怎么辦?

		//構造新節點tmp
		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data, x);
		tmp->first_child=0;
		tmp->last_child=0;

		//作為posintion.node的兄節點
		tmp->parent=position.node->parent;
		tmp->next_sibling=position.node;
		tmp->prev_sibling=position.node->prev_sibling;
		position.node->prev_sibling=tmp;

		if(tmp->prev_sibling==0)
			tmp->parent->first_child=tmp;
		else
			tmp->prev_sibling->next_sibling=tmp;
		return tmp;
	}

	// insert node as previous sibling of node pointed to by position
	// position可以是最后一個子節點的后一個
	iterator insert(sibling_iterator position, const T& x){
		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data, x);
		tmp->first_child=0;
		tmp->last_child=0;

		tmp->next_sibling=position.node;
		if(position.node==0) { // iterator points to end of a subtree
			tmp->parent=position.parent_;
			tmp->prev_sibling=position.range_last();
		}
		else {
			tmp->parent=position.node->parent;
			tmp->prev_sibling=position.node->prev_sibling;
			position.node->prev_sibling=tmp;
		}

		if(tmp->prev_sibling==0)
			tmp->parent->first_child=tmp;
		else
			tmp->prev_sibling->next_sibling=tmp;
		return tmp;
	}

	// insert node (with children) pointed to by subtree as previous sibling of node pointed to by position
	iterator insert(iterator position, iterator subtree){
		// insert dummy
		iterator it=insert(position, value_type());
		// replace dummy with subtree
		return replace(it, subtree);
	}

	// insert node (with children) pointed to by subtree as previous sibling of node pointed to by position
	iterator insert(sibling_iterator position, iterator subtree){
		// insert dummy
		iterator it=insert(position, value_type());
		// replace dummy with subtree
		return replace(it, subtree);
	}

	// insert node as next sibling of node pointed to by position
	// 在position之后插入一個弟節點
	iterator insert_after(iterator position, const T& x){
		//構造新節點tmp
		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data, x);
		tmp->first_child=0;
		tmp->last_child=0;

		tmp->parent=position.node->parent;
		tmp->prev_sibling=position.node;
		tmp->next_sibling=position.node->next_sibling;
		position.node->next_sibling=tmp;

		if(tmp->next_sibling==0) {
			tmp->parent->last_child=tmp;
		}
		/////////////////////////////////////////////////
		else{//added by zychen
			tmp->next_sibling->prev_sibling = tmp;
		}
		/////////////////////////////////////////////////
		return tmp;
	}


	// replace node at 'position' with other node (keeping same children)
	// 僅僅把position指向的內容更換而已
	iterator replace(iterator position, const T& x){
		destructor(&position.node->data);
		constructor(&position.node->data, x);
		return position;
	}

	// replace node at 'position' with subtree starting at 'from' (do not erase subtree at 'from')
	iterator replace(iterator position, iterator from){
		assert(position.node!=head);//head不允許作為樹根
		tree_node *current_from=from.node;
		tree_node *start_from=from.node;
		tree_node *last=from.node->next_sibling;
		tree_node *current_to  =position.node;

		// replace the node at position with head of the replacement tree at from
		erase_children(position);	
		tree_node* tmp = alloc_.allocate(1,0);
		constructor(&tmp->data, (*from));
		tmp->first_child=0;
		tmp->last_child=0;
		if(current_to->prev_sibling==0) {
			current_to->parent->first_child=tmp;
		}
		else {
			current_to->prev_sibling->next_sibling=tmp;
		}
		tmp->prev_sibling=current_to->prev_sibling;
		if(current_to->next_sibling==0) {
			current_to->parent->last_child=tmp;
		}
		else {
			current_to->next_sibling->prev_sibling=tmp;
		}
		tmp->next_sibling=current_to->next_sibling;
		tmp->parent=current_to->parent;
		destructor(&current_to->data);
		alloc_.deallocate(current_to,1);
		current_to=tmp;

		iterator toit=tmp;

		// copy all children
		do{
			assert(current_from!=0);
			if(current_from->first_child != 0) {
				current_from=current_from->first_child;
				toit=append_child(toit, current_from->data);
			}
			else {
				while(current_from->next_sibling==0 && current_from!=start_from) {
					current_from=current_from->parent;
					toit=parent(toit);
					assert(current_from!=0);
				}
				current_from=current_from->next_sibling;
				if(current_from!=last) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲摸摸操操av| 成人黄色av网站在线| 国产精品123区| 欧美三区在线观看| 国产精品黄色在线观看| 久久精品国产精品青草| 欧洲精品一区二区| 亚洲视频 欧洲视频| 国产精品资源在线| 日韩欧美成人激情| 视频在线观看国产精品| 在线欧美日韩国产| 国产精品国产三级国产a | 亚洲成a人片在线不卡一二三区| 国内久久精品视频| 日韩欧美激情一区| 天堂一区二区在线免费观看| 欧美综合视频在线观看| 亚洲美女屁股眼交| 色婷婷综合五月| 日韩理论片网站| 99精品欧美一区二区蜜桃免费| 久久久久久久久免费| 久久国产精品一区二区| 日韩精品一区二区三区中文精品| 亚洲狠狠爱一区二区三区| 色婷婷av久久久久久久| 亚洲视频网在线直播| 色先锋aa成人| 亚洲一区在线视频| 欧美日韩亚洲综合在线| 亚洲6080在线| 91精品国产色综合久久| 日本视频在线一区| 精品久久久久久久久久久久久久久久久 | 成人综合婷婷国产精品久久| 久久久精品tv| 成人动漫精品一区二区| 亚洲欧美日韩中文播放| 91免费看片在线观看| 亚洲午夜视频在线| 6080国产精品一区二区| 韩国一区二区三区| 国产女同性恋一区二区| 一道本成人在线| 天堂久久久久va久久久久| 日韩欧美国产一区二区在线播放 | a美女胸又www黄视频久久| 亚洲乱码国产乱码精品精小说| 色哟哟一区二区在线观看| 午夜久久久影院| 欧美va在线播放| 成人激情视频网站| 婷婷中文字幕综合| 国产午夜精品一区二区三区四区| 99国产精品视频免费观看| 一区二区三区四区在线播放| 欧美高清一级片在线| 玖玖九九国产精品| 亚洲欧洲美洲综合色网| 555夜色666亚洲国产免| 成人永久免费视频| 亚洲狠狠爱一区二区三区| 精品国产三级电影在线观看| 成人理论电影网| 日韩精品一区第一页| 日本一区二区三区四区| 欧美伦理电影网| 成人高清伦理免费影院在线观看| 亚洲gay无套男同| 国产偷国产偷亚洲高清人白洁| 日本二三区不卡| 激情综合一区二区三区| 一区二区在线观看不卡| 26uuu精品一区二区在线观看| 91麻豆精东视频| 韩日精品视频一区| 亚洲国产综合91精品麻豆| 国产欧美日韩不卡免费| 欧美一区中文字幕| 色婷婷国产精品| 丁香婷婷综合五月| 日韩黄色片在线观看| 1024精品合集| 国产清纯美女被跳蛋高潮一区二区久久w | 久久综合色天天久久综合图片| 一本色道**综合亚洲精品蜜桃冫 | 久久人人爽爽爽人久久久| 欧美在线观看视频一区二区| 成人午夜视频网站| 精品亚洲成av人在线观看| 午夜精品爽啪视频| 亚洲色图丝袜美腿| 中文字幕精品综合| 久久老女人爱爱| 欧美一区二区大片| 欧美日韩免费观看一区三区| 成人av电影在线播放| 国产精品资源站在线| 久久se精品一区精品二区| 亚洲成人av一区二区| 一区二区三区波多野结衣在线观看| 国产午夜久久久久| 久久久国产精华| 久久久精品免费观看| 久久综合av免费| 精品成a人在线观看| 日韩精品一区在线| 久久综合狠狠综合久久综合88| 制服.丝袜.亚洲.另类.中文| 欧美片网站yy| 日韩欧美黄色影院| 精品日韩欧美一区二区| 精品国产一区二区三区不卡| 日韩一二三区不卡| 精品国产一二三| 2023国产精品| 国产婷婷精品av在线| 中文在线免费一区三区高中清不卡 | 亚洲乱码国产乱码精品精98午夜 | 欧美系列日韩一区| 欧洲另类一二三四区| 欧美日韩一区高清| 91精品国产综合久久蜜臀| 7777精品伊人久久久大香线蕉 | 青青草视频一区| 美国十次综合导航| 国产精品99久| 99re这里只有精品首页| 色8久久精品久久久久久蜜| 欧美日韩一区中文字幕| 欧美高清www午色夜在线视频| 91精品国产综合久久久久久久| 日韩一区二区精品在线观看| 亚洲精品一区二区在线观看| 国产日产欧产精品推荐色| 日韩理论片在线| 石原莉奈一区二区三区在线观看| 精品综合免费视频观看| 丰满亚洲少妇av| 欧美色视频一区| 久久日韩粉嫩一区二区三区| 亚洲日本丝袜连裤袜办公室| 日韩国产精品久久| 国产成人av在线影院| 在线观看视频一区| 久久综合丝袜日本网| 亚洲日本欧美天堂| 久久99蜜桃精品| 91久久线看在观草草青青| 欧美一区二区精品| 综合欧美一区二区三区| 麻豆精品在线视频| 色狠狠一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 91久久精品日日躁夜夜躁欧美| 88在线观看91蜜桃国自产| 国产精品毛片a∨一区二区三区| 午夜精品久久一牛影视| 成人av在线一区二区三区| 欧美一区二区三区播放老司机| 国产精品美女一区二区三区| 日本欧美韩国一区三区| 91蜜桃传媒精品久久久一区二区| 日韩欧美国产一区二区三区 | 中文字幕欧美激情一区| 青青青伊人色综合久久| 色婷婷av一区二区三区gif| 国产亚洲欧美中文| 日韩精品每日更新| 色婷婷久久99综合精品jk白丝| 久久久777精品电影网影网 | 成人黄色软件下载| 日韩欧美国产不卡| 亚洲第一综合色| 91久久国产综合久久| 国产精品久久久久一区| 黑人精品欧美一区二区蜜桃| 91精品国产欧美日韩| 亚洲国产日日夜夜| 91麻豆.com| 国产精品视频一区二区三区不卡| 麻豆中文一区二区| 91精品国产综合久久香蕉的特点| 亚洲午夜久久久久久久久电影院| www.久久精品| 最新久久zyz资源站| 成人动漫在线一区| 国产精品福利一区二区三区| 国产成人免费在线观看| 久久女同精品一区二区| 国产综合色在线| 日韩一二三区不卡| 久久99九九99精品| 日韩精品影音先锋| 精品一区二区三区av| 精品粉嫩aⅴ一区二区三区四区| 青青草国产成人av片免费| 欧美一区午夜视频在线观看| 秋霞成人午夜伦在线观看|