双端队列deque比向量vector更有优势

双端队列(deque) 连续存储的指向不同元素的指针所组成的数组<deque>

队列(queue) 先进先出的值的排列 <queue>

优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>

1 back();

返回向量中的最后一个对象

2 begin();

队列第一个元素位置

3 clear();

删除向量中的所有对象

4 end();

队列最后一个元素的下一个位置

5 erase(iterator it);

删除it所指向的容器对象

6 front();

返回向量中的第1个对象

7 insert(iterator it,const T&);

向it所指的的向量位置前插入一个对象

8 max_size();

返回向量可容纳最多对象的个数

9 pop();

出队列

10 pop_back();

删除向量中最后一个元素

11 pop_front();

删除向量中第一个元素

12 push(const T&);

入队列

13 push_back(const T&);

向向量尾部插入一个对象

14 push_front(const T&);

向向量头部插入一个对象

15 size();

返回当前向量中已经存放的对象的个数

16 swap(deque T&);

交换两个队列的元素

17 top();

取队头元素

使用队列queue,执行命令

 #include <iostream>
#include <queue> int main()
{
char *p = ;
std::queue<char *>myq; myq.push("calc");//入队列
myq.push("notepad");
myq.push("tasklist");
myq.push("mspaint"); while (!myq.empty())
{
p = myq.front();//返回向量中的第1个对象
system(p);
myq.pop();//出队列
} return ;
}

使用双端队列deque

 #include <iostream>
#include <queue> int main()
{
std::deque<int>mydq;//双端队列 mydq.push_back();//向向量尾部插入一个对象
mydq.push_back();
mydq.push_back();
mydq.push_back();
mydq.push_back(); mydq.push_front();//向向量头部插入一个对象 mydq.insert(mydq.begin() + , );//向it所指的的向量位置前插入一个对象 mydq.erase(mydq.end() - );//删除it所指向的容器对象,如果要删除最后一个元素,需要end() - 1 for (int i = ; i < mydq.size(); i++)//下标访问
{
std::cout << mydq[i] << std::endl;
}
std::cout << std::endl; auto ib = mydq.begin();
auto ie = mydq.end(); for (; ib != ie; ib++)//迭代器访问
{
std::cout << *ib << std::endl;
} mydq.pop_front();//删除向量中第一个元素
mydq.pop_back();//删除向量中最后一个元素 mydq.clear();//删除向量中的所有对象 return ;
}

交换两个队列的元素

 #include <iostream>
#include <queue> int main()
{
std::deque<int>mydq1;//双端队列1 mydq1.push_back();//向向量尾部插入一个对象
mydq1.push_back();
mydq1.push_back();
mydq1.push_back();
mydq1.push_back(); std::deque<int>mydq2;//双端队列2 mydq2.push_back();//向向量尾部插入一个对象
mydq2.push_back();
mydq2.push_back();
mydq2.push_back();
mydq2.push_back(); mydq1.swap(mydq2);//交换两个队列的元素 {
auto ib = mydq1.begin();
auto ie = mydq1.end(); for (; ib != ie; ib++)//迭代器访问
{
std::cout << *ib << std::endl;
}
} std::cout << std::endl; {
auto ib = mydq2.begin();
auto ie = mydq2.end(); for (; ib != ie; ib++)//迭代器访问
{
std::cout << *ib << std::endl;
}
} return ;
}

max_size() ;

//返回向量可容纳最多对象的个数

 #include <iostream>
#include <queue> int main()
{
std::deque<int>mydq;//双端队列 mydq.push_back();//向向量尾部插入一个对象
mydq.push_back();
mydq.push_back();
mydq.push_back();
mydq.push_back(); std::cout << mydq.max_size() << std::endl;//返回向量可容纳最多对象的个数 std::cout << mydq.front() << std::endl;//返回向量中的第1个对象
std::cout << mydq.back() << std::endl;//返回向量中的最后一个对象 return ;
}

优先队列

 #include <iostream>
#include <queue> int main()
{
std::priority_queue<int>myq;//优先队列 myq.push();
myq.push();
myq.push();
myq.push();
myq.push(); while (!myq.empty())
{
std::cout << myq.top() << std::endl;//取队头元素
myq.pop();//出队列
} return ;
}

优先队列高级用法

 #include <iostream>
#include <queue>
#include <string>
#include <vector> struct student
{
int age;
std::string name;
}; struct stuless
{
bool operator()(const student &s1, const student &s2)
{
return s1.age < s2.age;
}
}; int main()
{
std::priority_queue<student, std::vector<student>, stuless>myq;//优先队列高级用法,age为关键字进行排列 student s1;
s1.age = ;
s1.name = "hello"; student s2;
s2.age = ;
s2.name = "world"; student s3;
s3.age = ;
s3.name = "hello world"; myq.push(s1);
myq.push(s2);
myq.push(s3); while (!myq.empty())
{
std::cout << myq.top().age << " " << myq.top().name << std::endl;
myq.pop();
} return ;
}

#include <queue>的更多相关文章

  1. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  2. Entity Framework 6 Recipes 2nd Edition(13-9)译 -> 避免Include

    问题 你想不用Include()方法,立即加载一下相关的集合,并想通过EF的CodeFirst方式实现. 解决方案 假设你有一个如Figure 13-14所示的模型: Figure 13-14. A ...

  3. error RC1015: cannot open include file 'afxres.h' 解决办法

    在为WindowsPhone8程序添加本地化的过程中遇到这个问题: 问题原因就是afxres.h文件缺失,下载它,放到VS安装目录下的VS\include目录下就可以了(选择目录的时候注意对应对版本) ...

  4. Mybatis常用总结:参数,返回,执行sql,include等

    1.参数注入1.1用#{0},#{1}的形式,0代表第一个参数,1代表第二个参数 public List<RecordVo> queryList(String workerId, Inte ...

  5. jsp中的@include与jsp:include区别详解

    1 前言 搞java开发的人也许都知道在jsp中引入项目中其他文件有如下两种方式 <%@include file="xxx.jsp"%> <jsp:include ...

  6. JSP中编译指令include与动作指令include的区别

    include指令是编译阶段的指令,即include所包含的文件的内容是编译的时候插入到JSP文件中,JSP引擎在判断JSP页面未被修改, 否则视为已被修改.由于被包含的文件是在编译时才插入的,因此如 ...

  7. C/C++ 中的include

    当需要使用已有的方法或库时, 可以将它们的头文件#include进来. #include会在preprocess过程中被替换成它包含的代码. 头文件中包含了需要使用的函数/变量的声明. 当然声明与定义 ...

  8. 织梦多语言站点,{dede:include filename=''/}引入问题

    织梦模板include插入非模板目录文件出现"无法在这个位置找到"错误的解决办法 以下是dede V55_UTF8 查dede include标签手册 (3) include 引入 ...

  9. PHP 站点相对包含,路径的问题解决方法(include,require)

    以前看了,很多框架,基本上很少使用相对路径包含.而一般很多做php web站点,喜欢用相对路径. 认为这样,无论目录放到那里. 只要跟另外目录关系一致.那么就不会出现问题.如果一个站点,一般都认为,如 ...

  10. 如何让include标签包裹的布局置于屏幕最下方?

    如何让一个Layout 始终在屏幕的下方 我想让<include layout="@layout/bottom" />一直在屏幕下,怎么做? 1.相对布局中用属性  a ...

随机推荐

  1. UESTC_邱老师的脑残粉 2015 UESTC Training for Graph Theory<Problem D>

    D - 邱老师的脑残粉 Time Limit: 12000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

  2. Raphaël—JavaScript Library

    Raphaël-JavaScript Library What is it? Raphaël is a small JavaScript library that should simplify yo ...

  3. JNI与JNA性能比较

    JNI与JNA性能比较 在介绍JNA时,提到了JNA是基于JNI的,是在JNI上封装了一层,JNI性能不如JNA.最近在网上看到篇简单的比较这两者性能的文档,感觉不错,现转载一下: 分别用JNI和JN ...

  4. js查找和过滤

    通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤. 最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身 ...

  5. Python 列表生成式、生成器、迭代器

    列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么 ...

  6. Python 自动化脚本学习(二)

    流程控制 布尔值 temp = True temp = False 比较符号 == != < <= > >= 与或非 and or not 混合布尔的比较 (4<5)an ...

  7. react redux 相关技术

    React全都是围绕着组件的, 所以React基础也就是:写组件的jsx.组件的生命周期以及组件的属性和状态.jsx,只要是用过html模板的分分钟就能写了: 所谓生命周期就是组件在创建.销毁.更新阶 ...

  8. 在Linux系统上限制远程登录的IP

    在Linux系统上限制远程登录的IP,使用系统自带的配置文件. /etc/hosts.allow /etc/hosts.deny 匹配原则  先allow 后deny.

  9. Android Native/Tombstone Crash Log 详细分析(转)

    转自:http://weibo.com/p/230418702c2db50102vc2h Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android Nat ...

  10. SQL SERVER中如何格式化日期(转)

    原文地址:http://blog.sina.com.cn/s/blog_95cfa64601018obo.html   1. SELECT convert(varchar, getdate(), 10 ...