STL之Deque的使用方法
STL 中类 stack 实现了一个栈
1)push 能够插入元素
2)pop 移除栈顶元素
使用的时候,需要包含头文件 #include <stack>,stack 被声明如下:
namespace std
{
template <class T, class Container = deque<T> >
class stack;
}
第一个模板参数表示元素的类型,第二个模板参数表明了实现堆栈所使用的容器,即内部用于存储元素的容器,默认使用 deque,你可以使用任何的顺序容器,甚至于自己提供的顺序容器,只要含有 back(), push_back(), pop_back() 方法即可
定义一个栈:
std::stack<int> st;
std::stack<int, std::vector<int> > st2; // 使用 vector 做容器保存元素
这里提及一下 deque,对于 deque,元素被移除的时候,释放内存,而且在重新分配内存(realloc)的时候,不会拷贝元素,这是与 vector 不同的地方
1. 核心接口
栈少不了的三个核心接口:
1)void push() 插入元素到栈顶
2)void pop() 移除栈顶元素(注意,函数类型为 void)
3)value_type& top() 返回栈顶元素,并不会移除这个元素(注意,返回的是栈顶元素的引用),看下面的代码:
std::stack<int> st;
st.push(1);
st.top() = 2; // 可以方便的修改栈顶元素
std::cout << st.top() << "\n"; // 输出 2
注意在 STL 中,在栈为空时,top 和 pop 是未定义的,对于检查栈的大小,可以使用 empty 函数或者 size 函数
empty --- 如果栈为空,返回 true,否则返回 false
size --- 栈的大小
对于栈来说,几乎(不是全部)就是上面介绍的几个函数了
2. 类型
1)std::stack::value_type 元素的类型,等同于实现栈的顺序容器的类型,例如默认情况下,std::stack::value_type 等同于 std::deque::value_type
2)std::stack::size_type 无符号的整数类型,用于定义 stack 的大小
3)std::stack::container_type 容器类型
3. 函数补充
构造函数:
explicit stack::stack(const Container& cont);
比较操作符:
包括 ==, <=, >=, !=, <, >
两个栈相等的含义是,栈中元素数目,以及对应位置的元素相等
deque: 是一个double-ended queue,
1)支持随即存取,也就是[]操作符,
2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则:
1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
STL之Deque的使用方法的更多相关文章
- 带你深入理解STL之Deque容器
在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...
- STL之deque双向队列
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...
- STL之Deque容器
1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...
- STL不同容器的使用方法
以下内容摘自:http://blog.csdn.net/u014465639/article/details/70241850 1.vector(需要导入头文件#include <vector& ...
- STL中deque
以下学习一下STL中另一种序列容器——deque. deque表示double-ended queue,即双向队列,deque是通过作为动态数组的方式实现的,这样可以在两端插入元素.因此,deque可 ...
- STL中的set使用方法详细!!!!
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- STL中deque 解析
一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是 ...
- STL 之 sort 函数使用方法
关于Sort Sort函数是C++ STL(Standard Template Library / 标准函数库) <algorithm>头文件中的一个排序函数,作用是将一系列数进行排序,因 ...
- [转]STL之deque容器详解
Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...
随机推荐
- 树及其衍生算法(Trees and tree algorithms)
1,二叉树(Binary tree) 二叉树:每一个节点最多两个子节点,如下图所示: 相关概念:节点Node,路径path,根节点root,边edge,子节点 children,父节点parent,兄 ...
- POJ 1789 -- Truck History(Prim)
POJ 1789 -- Truck History Prim求分母的最小.即求最小生成树 #include<iostream> #include<cstring> #incl ...
- babel 实践
一.@babel/core var babel = require("@babel/core");babel.transform(code, options, function(e ...
- 用key管理可复用元素
先看看不用key管理可复用元素的代码.Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染.这么做,除了使 Vue 变得非常快之外,还有一些有用的好处,那就是在切换input时不会清楚 ...
- a lot of attention under the hood
Because one of the original goals of the Node.js project was to allow developers to easily build app ...
- Selenium 2自动化测试实战34(编写Web测试用例)
编写Web测试用例 1.介绍了unittest单元测试框架,其主要是来运行Web自动化测试脚本.简单的规划一下测试目录:web_demo1/------test_case/------------te ...
- putty简易教程
和xshell相比,putty除了每次登陆时需要鉴权之外,基本上体验都差不多,由于putty以命令行操作方式为主,因此使用效率上会略高于xshell. 1.下载 下载地址1:(最新版) https:/ ...
- R语言与概率统计(三) 多元统计分析(中)
模型修正 #但是,回归分析通常很难一步到位,需要不断修正模型 ###############################6.9通过牙膏销量模型学习模型修正 toothpaste<-data. ...
- kettle在windows下面部署定时任务
KETTLE有三大块: Spoon:转换/工作(transform/job)设计工具,主要是GUI方式. Kitchen:工作(job)执行器,是一个作业执行引擎,通过命令行的方式带参数执行,参数说明 ...
- Java集合(5):理解Collection
Collection是List.Set.Queue的共同接口.Collection主要方法有: int size():返回当前集合中元素的数量 boolean add(E e):添加对象到集合 boo ...