您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“C++中的容器適配器與仿函數技術怎么使用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C++中的容器適配器與仿函數技術怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
容器適配器其實是一種設計模式。轉換出我們想要的東西。
比方說我們實現棧的時候既可以用數組,也可以用鏈表,此時我們就可以用到容器適配器了。
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; }
這樣我們就可以用不同的底層實現棧了。
仿函數其實就是用類重載()的方式來模擬一個函數。
我們現在寫一個比較大小的仿函數
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; } }; }
這個類我們就可以成為仿函數,而該類的對象成為函數對象。
用法:
當我們想同時派升序和降序的時候,我們可以利用仿函數來進行比較。
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; }
讀到這里,這篇“C++中的容器適配器與仿函數技術怎么使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。