总括:

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)的更多相关文章

  1. STL 序列容器

    转自时习之 STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这里介绍STL中的各种序 ...

  2. [STL]deque和stack、queue

    怎么说呢,deque是一种双向开口的连续线性空间,至少逻辑上看上去是这样.然而事实上却没有那么简单,准确来说deque其实是一种分段连续空间,因此其实现以及各种操作比vector复杂的多. 一.deq ...

  3. C++ STL之栈stack和queue的使⽤

    写在最前面,本文摘录于柳神笔记: (1)栈 stack 在头⽂件 #include 中,是数据结构⾥⾯的栈-以下是常⽤⽤法: (2)队列 queue 在头⽂件 #include 中,是数据结构⾥⾯的队 ...

  4. 带你深入理解STL之Stack和Queue

    上一篇博客,带你深入理解STL之Deque容器中详细介绍了deque容器的源码实现方式.结合前面介绍的两个容器vector和list,在使用的过程中,我们确实要知道在什么情况下需要选择恰当的容器来满足 ...

  5. STL List容器

    转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性.先学好一个,其它的就好办了.先从基础开始 ...

  6. C++ STL stack和queue

    C++ STL中独立的序列式容器只有vector,list,deque三种,stack和queue其实就是使用容器适配器对deque进行了封装,使用了新接口. 使用标准库的栈和队列时,先包含相关的头文 ...

  7. STL序列式容器学习总结

    STL序列式容器学习总结 参考资料:<STL源码剖析> 参考网址: Vector: http://www.cnblogs.com/zhonghuasong/p/5975979.html L ...

  8. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  9. 《STL源码剖析》——第四章、序列容器

     1.容器的概观与分类 所谓序列式容器,其中的元素都可序(ordered)[比如可以使用sort进行排序],但未必有序(sorted).C++语言本身提供了一个序列式容器array,STL另外再提供v ...

随机推荐

  1. java:数据结构(二)栈的应用(括号匹配)

    一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()()   这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...

  2. json-sever 配置与应用

    先安装 node.js. 全局安装 json-server: npm install json-server -g 检查是否安装成功: json-server -h 安装好后,json-server的 ...

  3. SQL Server数据库————模糊查询和聚合函数

    ***********模糊查询*********/ 关键字: like (!!!!字符串类型) in (,,)  匹配()内的某个具体值(括号里可以写多个值) between... and.. 在某两 ...

  4. RabbitMQ框架构建系列(一)——AMPQ协议

    一.MQ 在介绍RabbitMq之前,先来说一下MQ.什么是MQ?MQ全称为Message Queue即消息队列,就是一个消息的容器, MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入 ...

  5. 好程序员web前端分享HTML基本结构和基本语法

    HTML基本结构和HTML基本语法 HTML基本结构 HTML的基本语法 1.<常规标记><标记 属性=“属性值” 属性=“属性值”></标记> 标记也可叫标签或叫 ...

  6. 001_Go hello world

    一.go获取程序参数及指针地址示例 package main import ( "fmt" "os" ) func main() { fmt.Println(o ...

  7. node+mysql,实现基本的增删改查,附带跟踪记录和运行时间记录

    Node + mysql 实现基础的增删改查,以及性能测试. 网上有很多这样的例子,我也是找来学习的. 感觉node对mysql的操作非常简单,也很实用,比如自带防止sql注入的功能,一开始还担心注入 ...

  8. linux-高并发与负载均衡-lvs-功能配置介绍

    百度百科: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...

  9. iis设置默认文档,提示web.config配置xml格式不正确

    网站上传后,配置默认文档,提示web.config配置xml格式不正确,几经尝试,发现是sqlserver密码中的“&”符号惹的祸,web.config文件中不能使用该字符.分享出来,大家遇到 ...

  10. Hyperscan-5.1.0 安装

    安装依赖ragel ragel源码下载地址 编译安装 $ tar -xvf ragel-6.10.tar.gz $ cd ragel-6.10 $ ./configure $ make $ sudo ...