日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導讀]STL適配器,所謂適配器在設(shè)計模式中也有相應(yīng)的講解即,在不改變原有接口的前提下,將該接口轉(zhuǎn)換為我們期待的接口,通常要求的接口和被適配的接口會有相同或者相似的功能,分為三者,Target(客戶要求的接口

STL適配器,所謂適配器在設(shè)計模式中也有相應(yīng)的講解即,在不改變原有接口的前提下,將該接口轉(zhuǎn)換為我們期待的接口,通常要求的接口和被適配的接口會有相同或者相似的功能,分為三者,Target(客戶要求的接口) adaptee:(原有的接口,被適配的接口)? adapter(適配器接口),adapter是共有繼承了Target,成員變量獲得adaptee的指針來實現(xiàn)的?。?!


,適配器模式,分為兩種一種是對象適配器模式,一種是類適配器模式,STL適配器有三種,一種是迭代器適配器,一種是函數(shù)適配器,最后一種則是容器適配器:

所謂適配器說的簡單些,其根本就是類型轉(zhuǎn)換器其較簡單的講解就是原本是向前的操作,轉(zhuǎn)換之后變成了向后的操作。我們采用原本是iterator適配器,我們從容器中從前向后進行遍歷,而反向迭代器則是從最后元素開始遍歷,其下一個則是向前移動的。我們將原有的迭代器進行封裝,其C++代碼如下:


templateclass?TVector_iterator;
templateclass?Iterator_m
{
public:
	virtual?T*First()?=?0;	
	virtual?T*Next()?=?0;	
	virtual?bool?isDone()?=?0;
};
templateclass?TVector
{
private:
	T*?m_list;
	int?m_cur_num;
	int?m_max_num;
public:
	TVector()
	{
		m_list?=?NULL;
		m_max_num?=?24;
		m_list?=?new?T[m_max_num];
		m_cur_num?=?0;
	}
	int?get_num()
	{
		return?m_cur_num;
	}
	T*?First()
	{
		return?m_list;
	}
	TVector_iterator*?create_iterator()
	{
		return?new?TVector_iterator(this);
	}
	void?append(T?m)
	{
		if?(m_cur_num?==?m_max_num)
		{
			T*?new_list?=?new?T[m_max_num?*?2];
			for?(int?i?=?0;?i?<?m_max_num;?i++)
			{
				new_list[i]?=?m_list[i];
			}
			delete?m_list;
			m_list?=?new_list;
		}
		m_list[m_cur_num++]?=?m;
	}
};
templateclass?TVector_iterator?:public?Iterator_m{
private?:
	TVector*?m_hinstance;
	int?m_cur_pos;
	T*?m_head;
public:
	TVector_iterator(TVector*?m)
	{
		m_hinstance?=?m;
		m_cur_pos?=?0;
		m_head?=?m_hinstance->First();
	}
	T*?First()
	{
		m_cur_pos?=?0;
		return?m_head=m_hinstance->First();
	}
	T*?Next()
	{
		return?&m_head[m_cur_pos++];
	}
	T*?Prev()
	{
		return?&m_head[m_cur_pos--];
	}
	T*?Last()
	{
		m_cur_pos?=?m_hinstance->get_num()?-?1;
		m_head?=?m_hinstance->First();
		return?&m_head[m_cur_pos];
	}
	int?get_cur_pos()
	{
		return?m_cur_pos;
	}
	bool?isDone()
	{
		if?(m_cur_pos?==?m_hinstance->get_num())
		{
			return?true;
		}
		return?false;
	}
};
templateclass?reverse_iterator_m?:public?Iterator_m{
private:
	TVector_iterator*?m_iterator;
public:
	T*?First()
	{
		return?m_iterator->Last();
	}
	T*?Next()
	{
		return?m_iterator->Prev();

	}
	reverse_iterator_m(TVector_iterator*?m)
	{
		m_iterator?=?m;
		m_iterator->First();
	}
	bool?isDone()
	{
		if?(m_iterator->get_cur_pos()?==?-1)
		{
			return?true;
		}
		return?false;
	}

};
int?main()
{
	TVectormm;
	for?(int?i?=?0;?i?<?20;?i++)
	{
		mm.append(i);
	}
	TVector_iterator*?itr?=?mm.create_iterator();
	cout?<<?"這是使用Iterator?的結(jié)果n";
	while?(!itr->isDone())
	{
		cout?<<?*(itr->Next())?<<?endl;	
	}
	reverse_iterator_m*?ritr?=?new?reverse_iterator_m(itr);
	cout?<<?"這是使用reverse_Iterator?的結(jié)果n";
	ritr->First();
	while?(!ritr->isDone())
	{
		cout?<<?*(ritr->Next())?<<?endl;
	}
}

接下來要討論的就是函數(shù)適配器,所謂函數(shù)適配器,也即函數(shù)的類型轉(zhuǎn)換,比如大家最常用的例子是find_if,find_if的第三個參數(shù)是需要接受一個一元函數(shù),然而我們真的需要的是動態(tài)獲取find_if中的first到last中的數(shù)據(jù),另一個參數(shù)則是確定的值,這時候,就會需要進行函數(shù)的轉(zhuǎn)換,也即函數(shù)適配器:其C++代碼實現(xiàn)下所示:


#include#includeusing?namespace?std;



templatestruct?get_equal?:public?binary_function{
	bool?operator()(T?m,?T?n)
	{
		return?m?==?n;
	}
};

templateclass?bind_1St_cla?:public?unary_function{
protected:
	Fn?op;//保存函數(shù)對象
	typename?Fn::first_argument_type?value;//根據(jù)函數(shù)第一參數(shù)的類型,聲明變量,將值保存,以后不變,也即進行了綁定
public:
	//這里面需要做的兩個,一個是構(gòu)造函數(shù),對op?和value進行賦值
	bind_1St_cla(const?Fn&?m,?typename?Fn::first_argument_type?n)?:op(m),?value(n)
	{}
	//第二個是重載()操作符
	typename?Fn::result_type?operator()(const?typename?Fn::second_argument_type?m)
	{
		return?op(value,?m);
	}
};
//接下來是定義一個內(nèi)聯(lián)函數(shù),對類bind_1St_cla進行使用
templateinline?/*標志常駐內(nèi)存,提高速度*/?bind_1St_clathe_real_fuction(const?Fn&?m,?const?Ty?ha)
{
	return?bind_1St_cla(m,?ha);
}


int?main()
{
	int?a[]?=?{?1,?2,?3,?4,?5,?6,?7,?8?};
	int*?mm?=?find_if(a,?a?+?8,?the_real_fuction(get_equal(),?4));
	cout?<<?*mm?<<?endl;
}





本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉