总括:

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. Jmeter 接口测试实战-有趣的cookie

    Jmeter 接口测试实战-有趣的cookie 场景: 接口测试时常都需要登录,请求方式(post), 登录常用的方法有通过获取token, 获取session, 获取cookie, 等等. 这几种都 ...

  2. Java日期的一些基本处理

    今天工作中用到一些日期的处理.这里做一点浅显的整理. 1.日期的加减: 日期加减一般用到Calendar这个类比较好.这样不用处理12月加一个月和28.30.31.加一天等问题 String last ...

  3. MySQL随笔(1)

    mysql是一种关系型数据库,和SQL ,oracle一样是较为常用的关系型数据库,属于oracle旗下的产品,在web应用方面,MySQL是最好的RDBMS(relational database ...

  4. HTML语义化的理解

    语义化的主要目的:用正确的标签做正确的事情. 语义化验证方法:css裸奔--去掉css样式,然后看页面是否还具有很好的可读性. 语义化意义 / 优点: 1.让页面的内容结构化 2.利于浏览器解析和SE ...

  5. RocketMQ三主三从二命名服务平滑版本升级实操

    ​本文介绍本次进行RocketMQ平滑过渡升级的实际操作 前文已经介绍过了升级基本原理,主要思想就是先升级NameSrv(命名服务)然后在升级broker节点.broker节点先升级master节点然 ...

  6. python从开始到放弃的途中一直很菜的day13

    一直很菜的今天又来了两个新的概念,一个是装饰器,一个是推导式,装饰器好比女生出门前需要化妆的准备,推导式也称为生成式.先说装饰器吧,装饰器其实本质也是一个函数,并用@+函数名装饰到其他函数上,当这个其 ...

  7. [认证授权] 5.OIDC(OpenId Connect)身份认证(扩展部分)

    在上一篇[认证授权] 4.OIDC(OpenId Connect)身份认证(核心部分)中解释了OIDC的核心部分的功能,即OIDC如何提供id token来用于认证.由于OIDC是一个协议族,如果只是 ...

  8. 在混合开发框架模式中,简化客户端对Web API的频繁调用

    在混合开发框架模式中,有时候我们在处理树形节点的时候,需要很多关联的处理,可能需要结合用户配置信息,属性字典,以及表的字段分类等信息来展示一个结构树,那么在处理的时候就可能会频繁的对这些接口API进行 ...

  9. 关于vue生命周期

    官网给出的实例的生命周期图如下: beforeCreate(页面创建前),created(页面创建后),beforeMount(页面载入前),mounted(页面载入后),beforeUpdate(页 ...

  10. pydoc用法

    pydoc是python自带的一个文档生成工具,使用pydoc可以很方便的查看类和方法结构   本文主要介绍:1.查看文档的方法.2.html文档说明.   一.查看文档的方法 方法1:启动本地服务, ...