双端队列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>的更多相关文章
-
C++ std::queue
std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...
-
[ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
-
STL-<;queue>;-priority queue的使用
简介: 优先队列是一种容器适配器,优先队列的第一个元素总是最大或最小的(自定义的数据类型需要重载运算符).它是以堆为基础实现的一种数据结构. 成员函数(Member functions) (const ...
-
C++ STL--stack/queue 的使用方法
1.stack stack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类 ...
-
C++ 中queue(队列)的用法
#include <iostream>#include <queue>#include <assert.h>/*调用的时候要有头文件: #include<st ...
-
STL容器适配器 stack, queue
stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...
-
hdu 1387(Team Queue) STL
Team Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
-
#include <;NOIP2010 Junior>; 三国游戏 ——using namespace wxl;
题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏*有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...
-
C++常用的#include头文件总结
C++常用的#include头文件总结 这篇文章主要介绍了C++常用的#include头文件,对初学者理解C++程序设计大有好处的相关资料 本文详细罗列了C++所包含的头文件的名称及作用说明,比较 ...
随机推荐
-
Android笔记——Bundle类的作用
Bundle类用作携带数据,它类似于Map,用于存放key-value键值对形式的值.相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getSt ...
-
js 随笔
setInterval:即使在方法中使用了stopInterval这个方法也要执行完才会停止自行重复执行,解决:使用return false来跳出方法. JS string和num:当一个是字符串数字 ...
-
iOS,iPhone各机型设备号,屏幕宽高,屏幕模式
//获取设备型号 NSString *DeviceModel= [[UIDevice currentDevice] model]; //获取设备系统版本号 NSString *DeviceIOSVer ...
-
1.PHP内核探索:从SAPI接口开始
SAPI:Server Application Programming Interface 服务器端应用编程端口.研究过PHP架构的同学应该知道这个东东的重要性,它提供了一个接口,使得PHP可以和其他 ...
-
angular 指令@、=、&;的用法和区别
1.指令作用域中的@ 作用是把当前属性作为字符串传递. html: <div ng-controller="MyCtrl"> <drink water=" ...
-
mac+eclipse+svn+maven经验总结(转)
1.Eclipse for Mac:http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/indigo/SR2/ecl ...
-
angular popover的触发问题;
popover 一般如下用法; <div uib-popover="内容" popover-animation="false" popover-appen ...
-
makefile编译错误情况整理
错误情况1:makefile:5: *** 遗漏分隔符 . 停止 原因:具体的编译动作,开头不可以有空格,留白是由 按tab键形成的. 解决方法:去掉空格,改为tab键后,再执行make命令,成功. ...
-
jenkins的pipeline的使用
1.安装Pipeline Maven Integration Plugin 2.新建任务 3.编写pipeline代码 node { stage('get clone') { checkout([$c ...
-
java数组元素倒置
package dataStructure; import java.util.Arrays; import java.util.ArrayList; public class Test1 { sta ...