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 ...
随机推荐
- Python笔记-IO编程
IO在计算机中是指input和output(数据输入与输出),涉及到数据交换(磁盘.网络)的地方就需要IO接口. 输入流input stream是指数据从外面(磁盘.网络服务器)流入内存:输出流out ...
- android使用百度地图最新sdk5.0后后代码混淆时,地图无法显示闪退问题
描述:刚开始遇到这个问题我一步一步去排除,最后发现在初始化地图的时候,代码混淆就有问题了, 问题描述:当跳显示地图的页面APP闪退, 解决对比: 1:对于老版本百度sdk:代码混淆时语句: -libr ...
- linux_FTP连接失败
service vsftpd status vim /etc/vstpd/vsfptd.conf service vsftpd restart service iptables status serv ...
- java优先级队列的使用 leecode.703.数据流中的第K大元素
//设计一个找到数据流中第K大元素的类(class). //注意是排序后的第K大元素,不是第K个不同的元素. class KthLargest { private PriorityQueue<I ...
- SQL server数据库表碎片比例查询语句
For rebuilding index, here is also a script to figure out the fragmentation and decide whether rebui ...
- SpringBoot Mybatis 使用LocalDateTime
mybatis-spring-boot-starter 2.0.1 会报错,不知道如何解决(建议先不用) mybatis-spring-boot-starter 2.0.1 - 1.3.2 版本不会报 ...
- 导入python库失败时的方法
出现以下错误如何解决: e.g. cmd: pip install Django -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host ...
- linux下的别名机制
相当于用户自己创建一个属于自己的命令.在当前用户的家目录下有一个.bashrc文件,编辑该文件: eg:alias cls='clear' 如果命令要生效需要重新登录.用户输入cls就可以达到清屏的目 ...
- ARTS打卡第四周
Algorithm 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用 ...
- Linux:Day18(下) Bind9
子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库中进行授权. 类似根域授权tld: .com IN NS ns1.com. .com IN NS ns1.com. ns1.com IN ...