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 ...
随机推荐
- IOS跟ANDROID的区别
大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...
- Testlink1.9.17使用方法( 第四章 测试需求管理 )
第四章 测试需求管理 QQ交流群:585499566 需求规格说明书是我们开展测试的依据.首先,我们可以对项目(产品)的需求规格说明书进行分解和整理,将其拆分为多个需求,一个项目可以包含多个需求,一个 ...
- Spark RPC框架源码分析(二)RPC运行时序
前情提要: Spark RPC框架源码分析(一)简述 一. Spark RPC概述 上一篇我们已经说明了Spark RPC框架的一个简单例子,Spark RPC相关的两个编程模型,Actor模型和Re ...
- Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g)
Oracle下载与Oracle安装图解(Oracle19c,Oracle18c,Oracle12c,Oracle11g) 1.Oracle下载(Oracle11g) oracle下载方法,请根据以下步 ...
- Vue.js05:vue内联样式
对象就是无序键值对的集合 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- 使用ranger对kafka进行鉴权
使用ranger对kafka进行鉴权测试环境:ranger-kafka-plugin为0.6.3版本,kafka版本为kafka_2.10-0.10.1.1,且kafka broker为一个节点.一. ...
- C#使用异步操作时的注意要点(翻译)
异步操作时应注意的要点 使用异步方法返回值应避免使用void 对于预计算或者简单计算的函数建议使用Task.FromResult代替Task.Run 避免使用Task.Run()方法执行长时间堵塞线程 ...
- 彻底搞懂spark的shuffle过程(shuffle write)
什么时候需要 shuffle writer 假如我们有个 spark job 依赖关系如下 我们抽象出来其中的rdd和依赖关系: E <-------n------, ...
- .NET程序员我是如何通过一个产品在2年内买车买房
刚开始写博客不足之处望大家多多指点,少一些质疑多一些帮助,我们就能成为朋友. 我写博客的目的其实很简单就是为了分享知识,如有幸能申请当MVP那是最好不过了,这个过程对于“大牛”来说很快,但对于我来说估 ...
- ABP之多租户
“软件多租户”指的是一种软件架构,一个软件实例在一个服务器上运行,但为多个租户服务.租户们对软件实例有通用的访问入口,但是每个租户都有特定的权限. 在多租户体系架构中,用程序旨在为每个租户提供一个专用 ...