一.容器適配器
其實(shí)在使用模板時,我們不僅可以使用類模板,還可以使用容器模板,這就是一個容器適配器,我們可任意給模板實(shí)例化不同的容器,然后就可以使用容器里的接口。
template<class T,class Containers>
我們知道,??梢杂脭?shù)組實(shí)現(xiàn)也可以用鏈表實(shí)現(xiàn),以前在C語言那里,如果我們想要兩個底層不同的棧,要么寫兩個棧,要么用typedef,但這做不到自由控制;在C++中,我們可以容器適配器解決這個問題,數(shù)組鏈表秒切換。
?注意使用的接口必須是你實(shí)例化的容器所擁有的,否則會報(bào)錯。
例:
? vector容器沒有頭插(push_front)和頭刪(pop_front)接口
? list卻有這兩個接口,所以在使用時要特別注意。
二.模擬實(shí)現(xiàn)stack
?
庫里棧的模板是這樣的,這個deque是一個雙端隊(duì)列,它同時擁有vector和list的接口。?
?
?
上圖是棧的接口,都很簡單,棧符合先進(jìn)后出,下面就讓我們用容器適配器模擬實(shí)現(xiàn)棧吧。
?
源碼
template<class T,class Containers=deque<T>> //容器適配器
class stack //棧
{
public:
void push(const T& val) //入棧,即尾插
{
_con.push_back(val);
}
void pop() //出棧,即尾刪
{
_con.pop_back();
}
const T& top() const //取棧頂元素
{
return _con.back();
}
bool empty()
{
return _con.size() == 0;
}
size_t size() const
{
return _con.size();
}
private:
Containers _con;
};
三.模擬實(shí)現(xiàn)queue
?
隊(duì)列和棧差不多,但隊(duì)列是先進(jìn)先出原則。?
源碼
template<class T,class Containers=deque<T>>
class queue //隊(duì)列
{
public:
void push(const T&val) //入隊(duì)列,即尾插
{
_con.push_back(val);
}
void pop() //出隊(duì)列,即頭刪
{
_con.pop_front();
}
T& front() //取隊(duì)列的第一個元素
{
return _con.front();
}
const T& front() const
{
return _con.front();
}
bool empty()
{
return _con.size() == 0;
}
size_t size() const
{
return _con.size();
}
private:
Containers _con;
};
????本篇文章到此就結(jié)束了,?若有錯誤或是建議的話,歡迎小伙伴們指出;?????
????希望小伙伴們能支持支持博主啊,你們的支持對我很重要哦;????文章來源:http://www.zghlxwxcb.cn/news/detail-602310.html
????謝謝你的閱讀。????文章來源地址http://www.zghlxwxcb.cn/news/detail-602310.html
到了這里,關(guān)于【C++初階】容器適配器模擬實(shí)現(xiàn)棧和隊(duì)列(附源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!