深入探究C++中的容器適配器與仿函數(shù)技術(shù)
一、容器適配器
容器適配器其實(shí)是一種設(shè)計(jì)模式。轉(zhuǎn)換出我們想要的東西。
比方說我們實(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í)就是用類重載()的方式來模擬一個(gè)函數(shù)。
我們現(xiàn)在寫一個(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ù)來進(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++)
{
//用來判斷是否交換過,提高效率
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++設(shè)計(jì)模式之簡單工廠模式實(shí)例
這篇文章主要介紹了C++設(shè)計(jì)模式之簡單工廠模式實(shí)例,工廠模式有一種非常形象的描述,建立對(duì)象的類就如一個(gè)工廠,而需要被建立的對(duì)象就是一個(gè)個(gè)產(chǎn)品,需要的朋友可以參考下2014-09-09
淺談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用
下面小編就為大家?guī)硪黄獪\談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
C++計(jì)算ICMP頭的校驗(yàn)和實(shí)例
這篇文章主要介紹了C++計(jì)算ICMP頭的校驗(yàn)和的方法,代碼簡單實(shí)用,對(duì)于校驗(yàn)ICMP報(bào)文來說有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
C++中產(chǎn)生臨時(shí)對(duì)象的情況及其解決方案
這篇文章主要介紹了C++中產(chǎn)生臨時(shí)對(duì)象的情況及其解決方案,以值傳遞的方式給函數(shù)傳參,類型轉(zhuǎn)換以及函數(shù)需要返回對(duì)象時(shí),并給對(duì)應(yīng)給出了詳細(xì)的解決方案,通過圖文結(jié)合的方式講解的非常詳細(xì),需要的朋友可以參考下2024-05-05
C語言實(shí)現(xiàn)信號(hào)槽的項(xiàng)目實(shí)踐
信號(hào)槽是觀察者模式的一種實(shí)現(xiàn),一個(gè)信號(hào)就是一個(gè)能夠被觀察的事件,本文主要介紹了C語言實(shí)現(xiàn)信號(hào)槽的項(xiàng)目實(shí)踐模具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
c++實(shí)現(xiàn)合并文件以及拆分實(shí)例代碼
這篇文章主要介紹了c++實(shí)現(xiàn)合并文件以及拆分實(shí)例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

