STL容器适配器接口小结

来源:互联网 发布:淘宝助理导入宝贝详情 编辑:程序博客网 时间:2024/05/18 01:21

首先,stack是个顺序(不是关联)容器适配器,不简单的是个容器,是建立在容器基础上的,虽然其接口简单...

叫这个名字意思是使容器的操作限制在栈的接口上...

下面先简要介绍stack的接口

stack的特有操作
I.构造函数
1.stack<int> si;这样值类型是int,使用默认底层实现容器deque.等价于stack<int,deque<int>> si;
也可以这样
deque<int> di;
stack<int> si<di>;使用已有基础容器初始化栈
2.改变默认实现容器,栈的操作只需要出栈顶(表尾)元素等(具体见后面),决定了其底层可以使用任意容器,如stack<string,vector<string>> ss;
这样栈实现的操作如push就是由vector的push_back实现的,但是你不能越过去调用push_back,限定只能使用stack的push...

II.
si.push(item)栈顶压入元素
si.pop()弹出栈顶元素
si.top()返回栈顶元素

III.
si.empty()返回bool值
si.size()返回其中元素个数

 

stack作为容器适配器而必须具备的操作和其内部定义的类型
I.通用构造函数
A a;空适配器
A a(c);适配器内容初始化为容器c的副本

II.重载的比较操作符
==,!=,<,<=,>,>=
所有适配器必须支持这些操作符
至于使用其实是这样判定的
从头开始比较元素,
以第一个不同元素的比较结果作为适配器比较结果,有点类型字符串比较的方法
但是必须其中的值类型,比如stack<int>的int必须支持这些比较操作符...


III.自定义类型
size_type 一种类型,足以表示最大元素的个数(即表示其中元素个数的类型)
value_type 值(元素)类型
container_type 基础容器类型,如stack默认的是deque(双端队列)

 

使用stack必须包含#include <stack>

如果不行得在写上#include <deque>

如果是其他容器当然的包含其它顺序容器的头文件...

 

关于底层实现容器的要求:

The underlying container may be any of the standard container class templates or some other specifically designed container class. The only requirement is that it supports the following operations:

 

  • front()
  • back()
  • push_back()
  • pop_back()

Therefore, the standard container class templates vector, deque and list can be used. By default, if no container class is specified for a particular queue class, the standard container class template deque is used.

 

由于stack接口简单,可以很容易的代替自己写的栈(虽然顺序栈很简单),还是可以省下不少时间,至于STL的高效性,不容置疑...

原创粉丝点击