1、stack
1.1 stack的介紹
stack的文檔介紹
1. stack是一種容器適配器,專門用在具有后進先出 操作的上下文環(huán)境中,其刪除只能從容器的一端進行元素的插入與提取操作。
2. stack是作為容器適配器被實現(xiàn)的,容器適配器即是對特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來訪問其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出。
3. stack的底層容器可以是任何標(biāo)準(zhǔn)的容器類模板或者一些其他特定的容器類,這些容器類應(yīng)該支持以下操作: empty:判空操作 back:獲取尾部元素操作 push_back:尾部插入元素操作 pop_back:尾部刪除元素操作
4. 標(biāo)準(zhǔn)容器vector、deque、list均符合這些需求,默認(rèn)情況下,如果沒有為stack指定特定的底層容器,默認(rèn)情況下使用deque。
1.2 stack的使用
函數(shù)說明 | 接口說明 |
---|---|
stack() | 構(gòu)造空的棧 |
empty() | 檢測stack是否為空 |
size() | 返回stack中元素的個數(shù) |
top() | 返回棧頂元素的引用 |
push() | 將元素val壓入stack中 |
pop() | 將stack中尾部的元素彈出 |
1.2.1 stack的構(gòu)造
棧的構(gòu)造、析構(gòu)等默認(rèn)成員函數(shù)不需要我們自己寫,因為它是自定義類型,會自動調(diào)用默認(rèn)成員函數(shù)。
1.2.2 進、出棧等接口的模擬實現(xiàn)
棧是deque(雙端隊列)容器適配器構(gòu)造的對象,因此stack的這些接口,只需要調(diào)用deque的接口來完成就可以,本質(zhì)是對deque的接口再封裝一層。
所以這些接口實現(xiàn)的都很簡單
template<class T, class Container = deque<T>> // 雙端隊列
class stack
{
public:
stack()
{}
void push(const T& x)
{
_c.push_back(x);
}
void pop()
{
_c.pop_back();
}
T& top()
{
return _c.back();
}
const T& top()const
{
return _c.back();
}
size_t size()const
{
return _c.size();
}
bool empty()const
{
return _c.empty();
}
private:
Container _c;
};
2、queue
2.1 queue的介紹
queue的介紹文檔
1. 隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素。
2. 隊列作為容器適配器實現(xiàn),容器適配器即將特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數(shù)來訪問其元素。元素從隊尾入隊列,從隊頭出隊列。
3. 底層容器可以是標(biāo)準(zhǔn)容器類模板之一,也可以是其他專門設(shè)計的容器類。該底層容器應(yīng)至少支持以下操作: empty:檢測隊列是否為空 size:返回隊列中有效元素的個數(shù) front:返回隊頭元素的引用 back:返回隊尾元素的引用 push_back:在隊列尾部入隊列
pop_front:在隊列頭部出隊列
4. 標(biāo)準(zhǔn)容器類deque和list滿足了這些要求。默認(rèn)情況下,如果沒有為queue實例化指定容器類,則使用標(biāo)準(zhǔn)容器deque。
2.2 queue的使用
函數(shù)聲明 | 接口說明 |
---|---|
queue() | 構(gòu)造空的隊列 |
empty() | 檢測隊列是否為空,是返回true,否則返回false |
size() | 返回隊列中有效元素的個數(shù) |
front() | 返回隊頭元素的引用 |
back() | 返回隊尾元素的引用 |
push() | 在隊尾將元素val入隊列 |
pop() | 將隊頭元素出隊列 |
2.2.1 queue構(gòu)造
這里與stack一樣,調(diào)用自定義類型的默認(rèn)成員函數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-753700.html
2.2.2 入、出隊等接口的模擬實現(xiàn)
隊列也是deque(雙端隊列)容器適配器構(gòu)造的對象,只要調(diào)用它的接口來實現(xiàn)就可以,也是封裝了一層。文章來源地址http://www.zghlxwxcb.cn/news/detail-753700.html
template<class T, class Container = deque<T>>
class queue
{
public:
queue()
{}
void push(const T& x)
{
_c.push_back(x);
}
void pop()
{
_c.pop_front();
}
T& back()
{
return _c.back();
}
const T& back()const
{
return _c.back();
}
T& front()
{
return _c.front();
}
const T& front()const
{
return _c.front();
}
size_t size()const
{
return _c.size();
}
bool empty()const
{
return _c.empty();
}
private:
Container _c;
};
到了這里,關(guān)于[C++] STL_stack && queue接口的模擬實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!