深入探究C++中的容器適配器與仿函數(shù)技術(shù)
一、容器適配器
容器適配器其實是一種設計模式。轉(zhuǎn)換出我們想要的東西。
比方說我們實現(xiàn)棧的時候既可以用數(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; }
這樣我們就可以用不同的底層實現(xiàn)棧了。
二、仿函數(shù)
仿函數(shù)其實就是用類重載()的方式來模擬一個函數(shù)。
我們現(xiàn)在寫一個比較大小的仿函數(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; } }; }
這個類我們就可以成為仿函數(shù),而該類的對象成為函數(shù)對象。
用法:
當我們想同時派升序和降序的時候,我們可以利用仿函數(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; } }; template <class T, class compare> void BubbleSort(vector<T>& a, compare com) { for (int i = 0; i < a.size() - 1; i++) { //用來判斷是否交換過,提高效率 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; }
到此這篇關(guān)于深入探究C++中的容器適配器與仿函數(shù)技術(shù)的文章就介紹到這了,更多相關(guān)C++容器適配器與仿函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析C/C++指針、函數(shù)、結(jié)構(gòu)體、共用體
這篇文章主要介紹了C/C++指針、函數(shù)、結(jié)構(gòu)體、共用體的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01C++實現(xiàn)LeetCode(14.最長共同前綴)
這篇文章主要介紹了C++實現(xiàn)LeetCode(14.最長共同前綴),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07C++實現(xiàn)LeetCode(123.買股票的最佳時間之三)
這篇文章主要介紹了C++實現(xiàn)LeetCode(123.買股票的最佳時間之三),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07