9.6 容器適配器
適配器是標準庫的一個通用概念,表示使得一種類型看起來像另一種類型。
一個容器適配器接收一個已有的容器類型。標準庫定義的三個容器適配器。
stack,queue,priority_queue.
他們都是在某個順序容器的基礎上實現的。
它們支持的通用操作爲。
其中A a©;需要記住以下,c是A的低層實現容器的對象,也就是說可以使用底層容器的對象來初始化容器適配器。
//可以 低層容器是deque
stack<int> s(dq);
//不行,低層容器不是deque
stack<int, vector<int>> s1(dq);
329頁,最後一段說明有錯誤,
stask,queue,priority_queue都沒有push_back,push_front的函數。
它們根據自己的特徵,把函數名字都給改了。
比如stack,支持
stack<int> s;
s.push(1);//添加元素
s.pop();//刪除棧頂元素
s.top();//訪問棧頂元素
容器適配器不能夠使用低層容器的成員函數。
容器適配器 | 默認低層容器 | 其餘可用容器 |
---|---|---|
stack | deque | list、vector |
queue | deque | list,vector |
priority_queue | vector | deque |
priority_queue需要支持隨機訪問所以不能使用list實現。
stack的操作
queue和priority_queue的操作
注意隊列的pop是會刪除隊列的最前面的元素的,書上寫錯了
priority_queue,按照優先級存儲元素,新加入的元素會排在所有優先級比他低的元素的前面,默認使用<運算符,來作爲優先級的依據。
所有優先級對面存入數值的化,會自動排序
std::priority_queue<int> p_queue;
for (const auto item: { 123,12,343,5,3,245,3,6,54,6,45,2,3,12,31 }) {
p_queue.push(item);
}
while (!p_queue.empty()) {
cout << p_queue.top() << endl;
p_queue.pop();
}
練習
9.52
string str = "{123{321}123{123}123}";
stack<char> char_stack;
char_stack.empty();
for (const auto& item:str) {
if(item=='}'){
while (char_stack.top()!='{') {
char_stack.pop();
}
char_stack.pop();
char_stack.push('X');
}
else {
char_stack.push(item);
}
}