您好,登錄后才能下訂單哦!
本文小編為大家詳細(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í)就是用類重載()的方式來(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ù)怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(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)容。