stack的介紹及使用
1.stack是一種容器介面卡,專門用在具有先進後出操作的上下文環境中,其刪除只能從容器的一端進行元素的插入與提取操作
2.stack是作為容器介面卡被實現的,容器介面卡即是對特定類封裝作為其底層的容器,並提供一組特定的成員函式來訪問其元素,將特定類作為其底層的,元素特定容器的尾部(棧頂)被壓入和彈出。
3.stack的底層容器可以使任何標準的容器類模板或者一些其他特定的容器類,這些容器類應該支援以下操作:
empty:判空操作
back:獲取尾部元素操作 pop
push_back:尾部插入元素操作 push
pop_back:尾部刪除元素操作
4.標準容器vector、list、deque均符合這些要求,預設情況下,如果沒有為stack指定特定的底層容器,預設用deque
相當於vector:增容代價小
相當於list:可以減少記憶體碎片
stack的使用
stack():構造空的棧
empty():檢測stack是否為空
size():返回stack中元素的個數
top():返回棧頂元素的引用
push():將元素val壓入stack
2.queue的介紹和使用
queue的介紹:
1.佇列是一種容器介面卡,專門用於在fifo上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
2.佇列作為容器介面卡實現,容器介面卡即將特定容器封裝作為其底層容器類,queue提供一組特定的成員函式 來訪問其元素。元素從隊尾入佇列,從隊頭出佇列
3.底層容器可以是標準容器類模版之一,也可以是其他專門設計的容器類。該底層容器 應支援:
empty:檢測佇列是否為空
size:返回佇列中有效元素的個數
front:返回隊頭元素的引用
back:返回隊尾元素的引用
pus h_back:在佇列尾部入佇列
pop_front:在佇列頭部出佇列
4.標準容器類deque和list滿足這些要求,預設其情況下,如果沒有deque例項化指定容器類,則使用標準容器deque
priority_queue的介紹和使用
1.優先佇列是一種容器介面卡,根據嚴格的弱排序標準,它的第乙個元素總是它所包含的元素中最大的
2.在堆中可以隨時插入元素 ,並且只能檢索最大堆元素,queue提供一組特定的成員函式來訪問元素,元素從特定容器的「尾部」彈出,稱為優先佇列的頂部。
3.底層容器可以是任何標準容器類模板,也可以是其他特定設計的容器類,容器應該可以通過隨機訪問迭代器訪問,並支援以下操作:
empty():檢測容器是否為空
size():返回容器中有效元素的個數
front():返回容器中第乙個元素的引用
push_back():在容器尾部插入元素
pop_back():刪除容器尾部元素
4.標準容器類vector和deque滿足這些需求,預設情況下,如果沒有為特定priority_queue類例項化指定容器類,則使用vector
5.需要支援隨機訪問迭代器,以編始終在內部保持堆結構,容器介面卡通過在需要時自動呼叫演算法函式make_heap,push_heap,和pop_heap來自動完成此操作
priority_queue的使用
優先順序佇列預設使勇氣用vector作為其底層儲存資料的容器,在vector上又使用了堆演算法將vector中元素構造成堆的結構,因此priority_queue就是堆,所有需要用到堆的位置,都可以考慮使用priority_queue
容器介面卡
介面卡是一種設計模式,它是被人反覆使用的,多數人知曉的,經過分類編目的,**設計經驗的總結。
為什麼將stack,queue,priority_queue中也可以存放元素,但在stl中並沒有將其劃分在容器的行列,而是將其稱為容器介面卡,這是因為每個容器在底層都有自己的實現方式,而stack、queue、priority_queue只是在底層將其他容器進行了封裝。
為什麼選擇deque作為stack和queue的底層預設容器
stack是一種先進後出的特殊線性資料結構,因此只要具有push_back()和pop_back()操作的線性結構,都可以作為stack的底層容器,比如vector和list都可以,queue是先進先出的特殊線性資料結構,只要具有push_back和pop_front操作的線性結構,都可以作為queue的底層容器,比如list,但是stl中對stack和queue預設選擇deque作為其底層容器,主要因為是
1.stack和queue不需要遍歷(因此stack和queue沒有迭代器),只需要在固定的一端或者兩端進行操作。
2.在stack中元素增長時,deque比vector的效率高,queue中的元素增長時,deque不僅效率高,而且記憶體率高
#include#include#include#includeusing namespace std;
//namespace zhao
//// void push(const t& x)
//
// void pop()
//
// t& top()
//
// size_t size() const
//
// bool empty()const
//
// private:
// con _c;
// };
//}//void teststack()
//*/
// zhao::stacks;
// s.push(1);
// s.push(2);
// s.push(3);
// s.push(4);
// cout << s.size() << endl;
// cout << s.top() << endl;
// s.pop();
// s.pop();
//}//queue的模擬實現
#includenamespace lin
void push(const t& x)
void pop()
t& back()
t& front()
/*const t& front() const
*/size_t size()const
bool empty() const
private:
con _c;
};}void testqueue()
//priority_queue的模擬實現
namespace fen
template priority_queue(inputiterator first, inputiterator last)
: c(first, last)
bool empty()const
size_t size() const
t& top() const
void push(const t& x)
void pop()
private:
sequeue c;
compare comp;
};}int main()
Queue 和Stack 的區別
protected void page load object sender,eventargs e queue 先進先出。所以結果是123 true string str1 queue.dequeue tostring foreach object obj in queue string str2...
棧(Stack)和佇列(Queue)
棧和佇列是兩種重要的線性結構。從資料結構角度看,棧和佇列也是線性表,其特殊性在於棧和佇列的基本操作是線性表操作的子集,它們是操作受限的線性表,因 此,可稱為限定性的資料結構。但從資料型別角度看,它們是和線性表大不相同的兩類重要的抽象資料型別。由於它們廣泛應用在各種軟體系統中,因此在物件導向 的程式設...
棧stack 和 佇列queue
stl中,sort的預設排序為less,也就是說從小到大排序 priority queue預設是less,也就說大頂堆 map預設是less,也就說用迭代器迭代的時候預設是小的排在前面 set預設是less,也就是說用迭代器迭代的時候是從小到大排序的。棧和佇列的區別是啥?吃多了拉就是佇列,吃多了吐就...