深入探究C++中的容器適配器與仿函數(shù)技術(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)文章
淺談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用
下面小編就為大家?guī)硪黄獪\談返回函數(shù)內(nèi)部new分配的內(nèi)存的引用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12

