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);
		}
	}
发布了54 篇原创文章 · 获赞 6 · 访问量 3322

猜你喜欢

转载自blog.csdn.net/zengqi12138/article/details/104280230