c++容器适配器

一、容器适配器

除了顺序容器外,标准库还定义了三个顺序容器适配器:stack,queue,priority_queue

容器、迭代器和函数都有适配器。本质上,适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样,因此三个容器适配器都有自己的默认容器类型

stack和queue是基于deque实现的,priority_queue是基于vector实现的

二、定义适配器

种类 默认顺序容器 可用顺序容器 说明
stack deque vector、list、deque 只需back操作即可
queue deque list、deque 必须提供front()运算
priority_queue vector vector、deque 必须提供随机访问功能
stackstk1;
stack>stk2;		//在vector上实现的栈
stack>stk3(vec);   //用基础容器来初始化适配器

三、通用操作、类型

//类型
size_type	一种足以保存当前类型最大对象的大小的类型
value_type	元素类型
container_type	实现适配器的底层容器类型
//操作
A a	        创建一个名为a的空适配器
A a(c)	    创建一个名为a的适配器,带有容器c的拷贝
关系运算符	每个适配器都支持所有关系运算符,这些运算符返回底层容器的比较结果
a.empty()	如果a包含任何元素,返回false
a.size()	返回a中的元素数目
swap(a,b) a.swap(b)	交互a和b中的内容,a和b必须有相同类型,包括底层容器类型也必须相同

四、栈适配器

stacks;
s.pop()	    //删除栈顶元素,但不返回该元素值
s.push(item)	//创建一个新元素压入栈顶
s.emplace(args)	//通过args创建一个新元素压入栈顶
s.top()	    //返回栈顶元素

五、队列适配器

queueq;
q.pop()	    //删除queue的首元素或priority_queue的最高优先级的元素
q.front(),q.back()	//返回首元素或尾元素,但不删除此元素,只适用于queue
q.top()	    //返回最高优先级的元素,但不删除此元素,只适用于priority_queue
q.push(item)	    //在queue末尾或priority_queue中恰当的位置创建一个元素
q.emplace(args)	    //同上

优先队列是基于二叉堆实现的,我们可以自定义排序方式

priority_queue, greater>q1;    //从小到大(小根堆)

你可能感兴趣的:(C++,容器)