04--STL序列容器(Stack和Queue)
总括:
- stack和queue不支持迭代
stack和queue是容器适配器,由容器deque实现
一:栈Stack
(一)栈的简介
- stack是堆栈容器,是一种“先进后出”的容器。
- stack是简单地装饰deque容器而成为另外的一种容器。
(二)栈的默认构造
- stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT;
- stack <int> stkInt; //一个存放int的stack容器。
- stack <float> stkFloat; //一个存放float的stack容器。
- stack <string> stkString; //一个存放string的stack容器。
- //尖括号内还可以设置指针类型或自定义类型。
(三)栈的出栈进栈操作push和pop《重点》
- stack.push(elem); //往栈头添加元素
- stack.pop(); //从栈头移除第一个元素
补充:top()返回栈头数据(但是数据不出栈),所以top和pop联用
(四)栈的拷贝构造及赋值
- stack(const stack &stk); //拷贝构造函数
- stack& operator=(const stack &stk); //重载等号操作符
(五)数据遍历:stack和queue不提供迭代器,所以想要获取数据,必须依次取走数据
- stack<int> st;
- st.push();
- st.push();
- st.push(); //栈底 5 4 3 栈头
- while (!st.empty())
- {
- cout << st.top() << " ";
- st.pop();
- }
- cout << endl;
(六)stack大小获取
- stack.empty(); //判断堆栈是否为空
- stack.size(); //返回堆栈的大小
(七)性能测试
- #include <stack>
- namespace jj06
- {
- void test_stack(long& s_size)
- {
- cout << "\ntest_stack()*******" << endl;
- /******变量声明:数组初始********/
- char buf[];
- /******变量声明:vector初始********/
- stack<string> stk;
- /******变量声明:记录时间********/
- clock_t timeStart = clock(); //开始时间
- for (long i = ; i < s_size; i++)
- {
- try
- {
- snprintf(buf, , "%d", rand());
- stk.push(string(buf));
- }
- catch (exception& e)
- {
- cout << e.what() << endl;
- cout << "Max_size:" << i << endl;
- abort(); //终止
- }
- }
- cout << "inti stack use milli-seconds:" << (clock() - timeStart) << endl; //获取初始化数组耗时
- cout << "stack.size:" << stk.size() << endl; //获取stack大小
- cout << "stack.top:" << stk.top() << endl; //获取stack栈顶元素
- stk.pop(); //出栈一个元素
- cout << "stack.size:" << stk.size() << endl; //获取stack大小
- cout << "stack.top:" << stk.top() << endl; //获取栈顶尾元素
- }
- }
二:队列Queue
(一)queue简介
- queue是队列容器,是一种“先进先出”的容器。
- queue是简单地装饰deque容器而成为另外的一种容器。
(二)queue对象的默认构造
- queue采用模板类实现,queue对象的默认构造形式:queue<T> queT; 如:
- queue<int> queInt; //一个存放int的queue容器。
- queue<float> queFloat; //一个存放float的queue容器。
- queue<string> queString; //一个存放string的queue容器。
- //尖括号内还可以设置指针类型或自定义类型。
(三)queue入队出队操作push和pop《重点》
- queue.push(elem); //往队尾添加元素
- queue.pop(); //从队头移除第一个元素
(四)queue的数据获取back和front《通常和上面联用》
- queue.back(); //返回最后一个元素
- queue.front(); //返回第一个元素
(五)queue队列大小获取
- queue.empty(); //判断队列是否为空
- queue.size(); //返回队列的大小
(六)性能测试
- #include <queue>
- namespace jj07
- {
- void test_queue(long& q_size)
- {
- cout << "\ntest_queue()*******" << endl;
- /******变量声明:数组初始********/
- char buf[];
- /******变量声明:vector初始********/
- queue<string> que;
- /******变量声明:记录时间********/
- clock_t timeStart = clock(); //开始时间
- for (long i = ; i < q_size; i++)
- {
- try
- {
- snprintf(buf, , "%d", rand());
- que.push(string(buf));
- }
- catch (exception& e)
- {
- cout << e.what() << endl;
- cout << "Max_size:" << i << endl;
- abort(); //终止
- }
- }
- cout << "inti queue use milli-seconds:" << (clock() - timeStart) << endl; //获取初始化数组耗时
- cout << "queue.size:" << que.size() << endl; //获取stack大小
- cout << "queue.front:" << que.front() << endl; //获取stack栈顶元素
- cout << "queue.back:" << que.back() << endl; //获取stack栈顶元素
- que.pop(); //出栈一个元素
- cout << "queue.size:" << que.size() << endl; //获取stack大小
- cout << "queue.top:" << que.front() << endl; //获取栈顶尾元素
- cout << "queue.back:" << que.back() << endl; //获取stack栈顶元素
- }
- }
04--STL序列容器(Stack和Queue)的更多相关文章
- STL 序列容器
转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...
- [STL]deque和stack、queue
怎么说呢,deque是一种双向开口的连续线性空间,至少逻辑上看上去是这样.然而事实上却没有那么简单,准确来说deque其实是一种分段连续空间,因此其实现以及各种操作比vector复杂的多. 一.deq ...
- C++ STL之栈stack和queue的使⽤
写在最前面,本文摘录于柳神笔记: (1)栈 stack 在头⽂件 #include 中,是数据结构⾥⾯的栈-以下是常⽤⽤法: (2)队列 queue 在头⽂件 #include 中,是数据结构⾥⾯的队 ...
- 带你深入理解STL之Stack和Queue
上一篇博客,带你深入理解STL之Deque容器中详细介绍了deque容器的源码实现方式.结合前面介绍的两个容器vector和list,在使用的过程中,我们确实要知道在什么情况下需要选择恰当的容器来满足 ...
- STL List容器
转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...
- C++ STL stack和queue
C++ STL中独立的序列式容器只有vector,list,deque三种,stack和queue其实就是使用容器适配器对deque进行了封装,使用了新接口. 使用标准库的栈和队列时,先包含相关的头文 ...
- STL序列式容器学习总结
STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...
- STL——序列式容器
一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...
- 《STL源码剖析》——第四章、序列容器
1.容器的概观与分类 所谓序列式容器,其中的元素都可序(ordered)[比如可以使用sort进行排序],但未必有序(sorted).C++语言本身提供了一个序列式容器array,STL另外再提供v ...
随机推荐
- C++设计模式视频讲解
设计模式(C++) 视频网址: http://www.qghkt.com/ 设计模式(C++)视频地址: https://ke.qq.com/course/318637?tuin=a508ea62 目 ...
- C#的扩展方法(this)
先在StringLibrary类中定义一个静态方法,如下: public static class StringLibrary { //第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰 ...
- Python 小试牛刀,Django详细解读,让你更快的掌握它!!!
一.MVC和MTV模式 MVC:将web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的对象(ORM),视图负责与用户的交 ...
- Jalor 5学习心得
jalor5是一套功能强大的框架,该框架集成了spring.mybatis.cxf.日志.异常等组件,和其它未提及的部分组件,如消息组件. 它还自带了权限管理,内容管理,国际化等功能,该框架在项目开发 ...
- selenium之表格的定位
浏览器网页常常会包含各类表格,自动化测试工程师可能会经常操作表格中的行,列以及某些特定的单元格,因此熟练掌握表格的定位方法是自动化测试实施过程中必要的技能. 被测试网页的HTML代码 <!DOC ...
- angularjs兼容thickbox 插件
ThickBox是一个基于JQuery类库的扩展,它能在浏览器界面上显示非常棒的UI框, 它可以显示单图片,多图片,ajax请求内容或链接内容.ThickBox 是用超轻量级的 jQuery 库 编写 ...
- Clion快捷键
快捷键配置 File->Setting->Keymap->Keymaps 选择Visual Studio风格 代码提示的匹配模式 File->Setting->Edito ...
- mybatis insertUseGeneratedKeys 返回主键为null
package tk.mybatis.mapper.common.special; import org.apache.ibatis.annotations.InsertProvider; impor ...
- python day05
数字类型 1.整型:整数 num = 1000000000000 type(num) --->int 2.浮点型:小数 num = 123.2341 type(num) --->float ...
- “百度杯”CTF比赛 十月场 Hash 复现
进入题后老套路得到两个关键: 1.$hash=md5($sign.$key);the length of $sign is 8 2.key=123&hash=f9109d5f83921a551 ...