赞
踩
除了顺序容器外,标准库还定义了三个顺序容器适配器: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 | 必须提供随机访问功能 |
- stack<int>stk1;
- stack<int, vector<int>>stk2; //在vector上实现的栈
- stack<int, vector<int>>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必须有相同类型,包括底层容器类型也必须相同
- stack<int>s;
- s.pop() //删除栈顶元素,但不返回该元素值
- s.push(item) //创建一个新元素压入栈顶
- s.emplace(args) //通过args创建一个新元素压入栈顶
- s.top() //返回栈顶元素
- queue<int>q;
- 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<int, vector<int>, greater<int>>q1; //从小到大(小根堆)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。