真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【C++】容器適配器-創(chuàng)新互聯(lián)

文章目錄
  • 一. 什么是適配器?什么是容器適配器?
  • 二.理解容器適配器
    • stack的模擬實現(xiàn)
    • queue的模擬實現(xiàn)

創(chuàng)新互聯(lián)是專業(yè)的吉首網(wǎng)站建設(shè)公司,吉首接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行吉首網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
一. 什么是適配器?什么是容器適配器?
  • 適配器是一種設(shè)計模式(設(shè)計模式是一套被反復(fù)使用的,多數(shù)人知曉的,經(jīng)過分類編目的,代碼設(shè)計經(jīng)驗的總結(jié)),該種模式將一個類的接口轉(zhuǎn)換成用戶需要的另外一個接口。

舉個例子:在日常生活中,當(dāng)手機沒電了,我們需要給手機充電,給手機充電的方式很多,可以插到電源上,也可以用充電寶,還可以直接連著電腦充。而我們并不關(guān)心用什么給它充電,我們關(guān)心的只是能否給手機充上電。適配器充當(dāng)?shù)慕巧褪?給手機充電的接口,它會將不同大小的電壓轉(zhuǎn)化成適合給手機充電的電壓。容器適配器的概念可以結(jié)合這個例子理解,它以 某種容器作為底層結(jié)構(gòu),改變其接口,使它符合該容器的特性。

  • 容器適配器:以某種已有的既定容器作為底層結(jié)構(gòu),在其基礎(chǔ)上進一步地進行封裝接口函數(shù)。使其可以滿足某種特性。

下面將介紹三個用到容器適配器的結(jié)構(gòu):stack棧,queue隊列,priority_queue優(yōu)先級隊列,通過這三個結(jié)構(gòu),我們可以更好的理解容器適配器的用途。

二.理解容器適配器
  • STL的六大組件
    在這里插入圖片描述

我們可以看出雖然stack,queue,priority_queue中也可以存放數(shù)據(jù),但在STL中并沒有將其劃分在容器的行列,而是將其稱為容器配接器,這是因為stack,queue,priority_queue只是對其它容器的接口進行了包裝,STL中stack和queue默認(rèn)使用deque,priority_queue默認(rèn)使用vector作為容器。我們現(xiàn)在來看看它們的底層接口和實現(xiàn)
在這里插入圖片描述
在這里插入圖片描述

stack的模擬實現(xiàn)

知道了容器適配器后,stack的模擬實現(xiàn)就簡單了,我們只需要調(diào)用指定容器deque的各個成員函數(shù)即可實現(xiàn)stack的各個函數(shù)接口。
在這里插入圖片描述
底層實現(xiàn)代碼如下:stack底層利用deque雙端隊列進行包裝,需要更改成多參數(shù)模板,最便利的一點就是,stack的底層函數(shù)的實現(xiàn)可以直接調(diào)用容器的函數(shù)接口,不需要自己再一步步實現(xiàn)。

namespace nn //命名空間域:防止命名沖突
{//多參數(shù)模板
	template>//可以明顯看出stack配接器的底層容器是deque雙端隊列,后面會介紹
	class stack
	{public:
		//元素入棧
		void push(const T& x)
		{	_con.push_back(x);
		}
		//元素出棧
		void pop()
		{	_con.pop_back();
		}
		//獲取棧頂元素
		T& top()
		{	return _con.back();
		}
		const T& top() const//const修飾
		{	return _con.back();
		}
		//獲取棧中有效元素個數(shù)
		size_t size() const
		{	return _con.size();
		}
		//判斷棧是否為空
		bool empty() const
		{	return _con.empty();
		}
		//交換兩個棧中的數(shù)據(jù)
		void swap(stack& st)//注意stack才是類型,加引用,別名,減少拷貝
		{	_con.swap(st._con);//調(diào)用deque的算法swap
		}
	private:
	    //deque_con底層
		Container _con;//將一個類的接口轉(zhuǎn)換成用戶需要的另一種接口,即利用deque容器轉(zhuǎn)換成stack配接器
	};
}
queue的模擬實現(xiàn)

同樣的方式,我們也是通過調(diào)用所指定容器的各個成員函數(shù)來實現(xiàn)queue的。
在這里插入圖片描述
底層實現(xiàn)代碼如下:

namespace nn //防止命名沖突
{template>class queue
	{public:
		//隊尾入隊列
		void push(const T& x)
		{	_con.push_back(x);
		}
		//隊頭出隊列
		void pop()
		{	_con.pop_front();
		}
		//獲取隊頭元素
		T& front()
		{	return _con.front();
		}
		const T& front() const
		{	return _con.front();
		}
		//獲取隊尾元素
		T& back()
		{	return _con.back();
		}
		const T& back() const
		{	return _con.back();
		}
		//獲取隊列中有效元素個數(shù)
		size_t size() const
		{	return _con.size();
		}
		//判斷隊列是否為空
		bool empty() const
		{	return _con.empty();
		}
		//交換兩個隊列中的數(shù)據(jù)
		void swap(queue& q)
		{	_con.swap(q._con);
		}
	private:
		Container _con;//deque_con;
	};
}

思考stack 和 queue 是否存在迭代器?

stack 和 queue 都不具備迭代器, 因為兩者都不具備遍歷走訪功能,所以自然不需要設(shè)計迭代器

stack 和 queue可以以哪些容器作為底層容器?

實際上stack使用vector作為底層容器也是可以的,queue使用deque雙端隊列+list帶頭雙向循環(huán)鏈表作為底層容器也是可以的。
但是deque在設(shè)計上相比于list和vector,作為stack,queue的底層結(jié)構(gòu)更優(yōu)。

底層容器如何傳進去?

作為模板參數(shù)傳入template>,用了默認(rèn)參數(shù)(缺省參數(shù))

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章標(biāo)題:【C++】容器適配器-創(chuàng)新互聯(lián)
URL分享:http://weahome.cn/article/hphjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部