STL的stack和queue读书笔记
2017-07-18 22:39
127 查看
其实stack(栈)在学习数据结构的时候就已经接触过了,栈是功能被阉割的线性表,只有一个入口,是一种先入后出的数据结构化,因为其简单操作,其实用到的地方还是挺广泛的,但本文不展开讲,因为主题还是在STL上,自然也是主要说STL的栈。
STL中的stack不是一种容器,而是容器适配器。即stack实在前面说到的容器的基础上封装而来的。从stack先进后出的特性来看,只要是线性的数据结构其实都可以作为栈的底层容器。
STL中栈的默认是以deque来作为底层数据结构的,且封装的很简单,只对stack暴露出操作尾部的接口,其实也可以用list,vector来作为底层数据结构。stack的源码中使用了底层容器的empty(),size(),back(),push_back(),pop_back(),还有各种常见的运算符重载等方法。如果我们自己实现的数据结构中实现了相应的方法,也可以直接作为stack的底层容器。
声明如下:
因为栈只能从栈顶访问数据,所以栈并没有迭代器,而是以成员方法top()来读取数据,pop(),push()来弹出和插入数据。
下面是各成员方法。要注意的是只有top()方法才会返回数据。pop()方法是直接弹出数据不返回数据的。
下面附上一个简单的用例,更多用法会在后面的文章中结合具体的问题来呈现
下面来讲讲queue,queue和stack其实是一样的都是由基本容器封装过来的。而且都是默认的使用deque来作为底层数据结构,也可选的使用list,但不建议使用vector来作为底层数据结构,因为vector向前扩展的功能太弱。
queue是单向双口的进出原则符合先进先出,STL中提供了一个back()方法可以让我们访问队尾元素,但是无法从队尾弹出元素。
成员方法如下:
测试程序如下:
STL中的stack不是一种容器,而是容器适配器。即stack实在前面说到的容器的基础上封装而来的。从stack先进后出的特性来看,只要是线性的数据结构其实都可以作为栈的底层容器。
STL中栈的默认是以deque来作为底层数据结构的,且封装的很简单,只对stack暴露出操作尾部的接口,其实也可以用list,vector来作为底层数据结构。stack的源码中使用了底层容器的empty(),size(),back(),push_back(),pop_back(),还有各种常见的运算符重载等方法。如果我们自己实现的数据结构中实现了相应的方法,也可以直接作为stack的底层容器。
声明如下:
因为栈只能从栈顶访问数据,所以栈并没有迭代器,而是以成员方法top()来读取数据,pop(),push()来弹出和插入数据。
下面是各成员方法。要注意的是只有top()方法才会返回数据。pop()方法是直接弹出数据不返回数据的。
下面附上一个简单的用例,更多用法会在后面的文章中结合具体的问题来呈现
stack<int> t_stack; for(int i=0;i<10;++i) { t_stack.push(i); //0 ~9 } cout<<"栈的大小:"<<t_stack.size()<<endl; //栈的大小:10 if(!t_stack.empty()) { for(int i=0;i<10;++i) { cout<<t_stack.top()<<" ";//输出数据 9~0 t_stack.pop();//弹出数据 } } cout<<endl<<"栈的大小:"<<t_stack.size()<<endl; //栈的大小:0
下面来讲讲queue,queue和stack其实是一样的都是由基本容器封装过来的。而且都是默认的使用deque来作为底层数据结构,也可选的使用list,但不建议使用vector来作为底层数据结构,因为vector向前扩展的功能太弱。
queue是单向双口的进出原则符合先进先出,STL中提供了一个back()方法可以让我们访问队尾元素,但是无法从队尾弹出元素。
成员方法如下:
测试程序如下:
queue<int> t_queue; for(int i=0;i<10;i++) { t_queue.push(i);//输入 0~9 } cout<<"队列的大小:"<<t_queue.size()<<endl;//队列的大小:10 if(!t_queue.empty()) { for(int i=0;i<10;i++) { cout<<t_queue.front()<<" ";//输出数据0~9 t_queue.pop();//弹出队头数据 } } cout<<endl<<"队列的大小:"<<t_queue.size()<<endl;//队列的大小:0
相关文章推荐
- STL中序列式容器之四stack
- STL 整理1(map、set、vector、list、stack、queue、deque、priority_queue)
- C++ STL--stack/queue 的使用方法
- 关于STL中stack的实现的讨论
- C++ STL stack/queue
- C++的STL模板set,multiset,map,multimap,deque,list,stack,queue和priority_queue
- STL源码—stack,queue
- STL--stack/queue的使用方法
- 5_5 集合栈计算机(UVa12096)<stack与STL其他容器的综合运用>
- 【转】STL中stack的用法
- c++ STL系列之一 stack与queue
- STL之queue&stack使用简介
- stl 常用函数(包括vector list stack queue)
- STL Stack/Queue/Set常用函数
- STL容器总结之stack和queue
- STL之stack
- C++ STL--stack/queue 的使用方法
- STL(标准模板库) 中栈(stack)的使用方法
- 关于STL中stack的实现的讨论
- STL中deque,queue,stack,list的学习