C++ Primer 第九章 9.6 容器適配器 練習和總結

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);
		}
	}
發佈了46 篇原創文章 · 獲贊 6 · 訪問量 3097
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章