溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中的容器適配器與仿函數(shù)技術(shù)怎么使用

發(fā)布時(shí)間:2023-05-05 17:33:14 來(lái)源:億速云 閱讀:266 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“C++中的容器適配器與仿函數(shù)技術(shù)怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++中的容器適配器與仿函數(shù)技術(shù)怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

一、容器適配器

容器適配器其實(shí)是一種設(shè)計(jì)模式。轉(zhuǎn)換出我們想要的東西。

比方說(shuō)我們實(shí)現(xiàn)棧的時(shí)候既可以用數(shù)組,也可以用鏈表,此時(shí)我們就可以用到容器適配器了。

namespace yyh
{
	template <class T, class container = vector<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back();
		}
		const T& top()
		{
			return _con.back();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		container _con;
	};
}
int main()
{
	yyh::stack<int, vector<int>> st1;
	yyh::stack<int, list<int>> st2;
	return 0;
}

這樣我們就可以用不同的底層實(shí)現(xiàn)棧了。

二、仿函數(shù)

仿函數(shù)其實(shí)就是用類重載()的方式來(lái)模擬一個(gè)函數(shù)。

我們現(xiàn)在寫(xiě)一個(gè)比較大小的仿函數(shù)

namespace yyh
{
	template <class T>
	struct less
	{
		bool operator()(const T& x, const T& y)
		{
			return x < y;
		}
	};
	template <class T>
	struct greater
	{
		bool operator()(const T& x, const T& y)
		{
			return x > y;
		}
	};
}

這個(gè)類我們就可以成為仿函數(shù),而該類的對(duì)象成為函數(shù)對(duì)象。

用法:

當(dāng)我們想同時(shí)派升序和降序的時(shí)候,我們可以利用仿函數(shù)來(lái)進(jìn)行比較。

namespace yyh
{
	template <class T>
	struct less
	{
		bool operator()(const T& x, const T& y)
		{
			return x < y;
		}
	};
	template <class T>
	struct greater
	{
		bool operator()(const T& x, const T& y)
		{
			return x > y;
		}
	};
	template <class T, class compare>
	void BubbleSort(vector<T>& a, compare com)
	{
		for (int i = 0; i < a.size() - 1; i++)
		{
			//用來(lái)判斷是否交換過(guò),提高效率
			int flag = 1;
			for (int cur = 0; cur < a.size() - 1 - i; cur++)
			{
				if (com(a[cur + 1], a[cur]))
				{
					swap(a[cur], a[cur + 1]);
					flag = 0;
				}
			}
			if (flag)
			{
				break;
			}
		}
	}
}
int main()
{
	yyh::less<int> lessFun;
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(5);
	v1.push_back(2);
	v1.push_back(4);
	v1.push_back(3);
	yyh::BubbleSort(v1, lessFun);
	for (auto e : v1)
	{
		cout << e << " ";
	}
	return 0;
}

C++中的容器適配器與仿函數(shù)技術(shù)怎么使用

讀到這里,這篇“C++中的容器適配器與仿函數(shù)技術(shù)怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI