赞
踩
函数说明 | 接口说明 |
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
size() | 返回stack中元素的个数 |
top() | 返回栈顶元素的引用 |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
函数声明 | 接口说明 |
queue() | 构造空的队列 |
empty() | 检测队列是否为空,是返回true,否则返回false |
size() | 返回队列中有效元素的个数 |
front() | 返回队头元素的引用 |
back() | 返回队尾元素的引用 |
push() | 在队尾将元素val入队列 |
pop() | 将队头元素出队列 |
容器适配器不是全新的容器,而是对已有容器的再包装,通过封装和定制原有容器的部分接口,使得适配后的容器表现出特定的逻辑结构和操作规则。及可以用原有接口实现新的接口
stack与queue默认使用的就是deque
顺序表的特点:
链表的特点:
对于deque它就像是vector与list的结合版,它头插尾插、头删尾删的效率都很高、支持随机下标访问、但是美中不足的是在中间插入删除时很复杂,效率很低并且其下标访问的效率并没有vector的效率高,接下来介绍一下deque的大致结构
deque插入一个数据时,会开辟一个小数组,当这个小数组满了时,不会扩容,而是再开辟一个小数组,这些小数组通过中控指针数组管理
- #include<vector>
- #include<deque>
- namespace zyq
- {
- template<class T,class Container=deque<T>>
- class stack
- {
- public:
- void push(const T& x)
- {
- _con.push_back(x);
- }
-
- void pop()
- {
- _con.pop_back();
- }
-
- const T& top() const
- {
- return _con.back();
- }
-
- size_t size() const
- {
- return _con.size();
- }
-
- bool empty() const
- {
- return _con.empty();
- }
-
- private:
- Container _con;
- };
- }
- #include<deque>
- namespace zyq
- {
- template<class T,class Container = deque<T>>
- class queue
- {
- public:
- void push(const T& x)
- {
- _con.push_back(x);
- }
-
- void pop()
- {
- _con.pop_front();
- }
-
- T& back()
- {
- return _con.back();
- }
-
- const T& back()const
- {
- return _con.back();
- }
-
- T& front()
- {
- return _con.front();
- }
-
- const T& front()const
- {
- return _con.front();
- }
-
- size_t size()const
- {
- return _con.size();
- }
-
- bool empty()const
- {
- return _con.empty();
- }
- private:
- Container _con;
- };
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。