C++ 学习笔记之——STL 库 queue
1. 队列
queue 队列是一种容器适配器,专门用来满足先进先出的操作,也就是元素在容器的一端插入并从另一端提取。
bool empty() const;返回队列是否为空;size_type size() const;返回队列中元素的数量;reference& back();返回队列中最后一个元素也即最新的元素的引用;reference& front();返回队列中的下一个元素也即最旧的元素的引用;void push (const value_type& val);在队尾插入一个元素;void pop();弹出队列的下一个元素也即最旧的元素,队头元素。
2. 优先级队列
优先级队列是一种容器适配器,根据一些严格的弱排序标准,专门设计使其第一个元素始终是它包含的最值元素。其本质上就是一个大顶堆或者小顶堆,会在需要时自动调用函数 make_heap,push_heap 和 pop_heap 自动完成堆化,比如插入新元素或者弹出堆顶元素。
bool empty() const;返回优先级队列是否为空;size_type size() const;返回优先级队列中元素的数量;const_reference top() const;返回优先级队列的顶部元素,也即比较优先级最高的元素;void push (const value_type& val);在优先级队列中插入一个元素;void pop();弹出优先级队列的顶部元素。
下面的例子中展示了构建优先级队列,将两个降序的 vector 合并成一个新的降序的 vector。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class mycomparison
{
bool big_heap; // 大顶堆标志位,也就是所有元素比堆顶元素小
public:
mycomparison(const bool& param=true)
{big_heap = param;}
bool operator() (const vector<int> vec1, const vector<int> vec2) const
{
if (big_heap) return (vec1[0] < vec2[0]);
else return (vec1[0] > vec2[0]);
}
};
int main ()
{
vector<int> vec1;
vec1.push_back(200);
vec1.push_back(50);
vec1.push_back(32);
vector<int> vec2;
vec2.push_back(100);
vec2.push_back(96);
vec2.push_back(20);
vector<int> vec3;
// priority_queue<vector<int>, vector< vector<int>>, mycomparison> q(mycomparison(false));
// priority_queue<vector<int>, vector< vector<int>>, mycomparison> q(false);
priority_queue<vector<int>, vector< vector<int>>, mycomparison> q;
q.push(vec1);
q.push(vec2);
while (!q.empty())
{
vector<int> temp = q.top();
q.pop();
vec3.push_back(temp[0]);
temp.erase(temp.begin());
if (temp.size() != 0) q.push(temp);
}
for (vector<int>::iterator it = vec3.begin(); it != vec3.end(); it++) cout << *it << ' ';
return 0;
}

参考资料 [http://www.cplusplus.com]
获取更多精彩,请关注「seniusen」!

C++ 学习笔记之——STL 库 queue的更多相关文章
- C++ 学习笔记之——STL 库 vector
vector 是一种顺序容器,可以看作是可以改变大小的数组. 就像数组一样,vector 占用连续的内存地址来存储元素,因此可以像数组一样用偏移量来随机访问,但是它的大小可以动态改变,容器会自动处理内 ...
- 学习笔记:STL
第一部分:(参考百度百科) 一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Me ...
- iOS学习笔记16-数据库SQLite
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...
- C++ 学习笔记之 STL 队列
一. 引言 在算法以及数据结构的实现中,很多地方我们都需要队列(遵循FIFO,先进先出原则). 为了使用队列,我们可以自己用数组来实现队列,但自己写太麻烦不说,并且还很容易出错. 好在C++的STL ...
- 重温JSP学习笔记--JSTL标签库
以前写jsp的时候对jstl标签库是有些抵触的,因为我觉得嵌入java代码的方式几乎无往不利,没有必要使用标签库,不过这次复习还是好好地学习了一下,发现这个还是很有用处的,用得好能省不少事,JSTL是 ...
- OpenGL学习笔记0——安装库
最近需要做一个基于Zigbee室内无线定位的系统,受到TI公司ZigBee Sensor Monitor软件的启发,打算用OpenGL来做一个3D显示空间内物体位置的程序.学习阶段选择VS2010+O ...
- 学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)
1.一种标签语言 day13 l JSTL标签库(重点) l 自定义标签(理解) l MVC设计模式(重点中的重点) l Java三层框架(重点中的重点) JSTL标签库 1 什么是JSTL ...
- C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型
一.string #include <string> using std::string 初始化函数: string s1; 默认构造函数 s1 为空串 ...
- 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典
聊天机器人知识主要是自然语言处理.包括语言分析和理解.语言生成.机器学习.人机对话.信息检索.信息传输与信息存储.文本分类.自动文摘.数学方法.语言资源.系统评测. NLTK库安装,pip insta ...
随机推荐
- window 下创建软链接 mklink
软链接是一种文件共享方式. 命令:mklink /d "C:\d" "C:\e" 有哪些坑: 1.此命名必须以管理员方式在cmd运行 2.文件必须不存在..通过 ...
- Java设计模式六大原则-2
Java设计模式六大原则-2 做Java程序开发的每天都在使用JDK,Spring,SpringMvc,Mybatis,Netty,MINA等框架,但很少有人懂得背后的原理.即使打开跟下原码也是一头雾 ...
- C++ 内存、new与malloc分配内存区别?
一关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建. ...
- STL专题·vector容器
1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize (vector<int> a(10);) vecto ...
- ATM购物作业
一. 基本需求 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录日常消费 ...
- 如何解决php无法存储session中的问题?
场景:前几天在一个技术群里面,看到一个小伙伴提出了一个问题------在thinkphp框架中,使用用户登录将用户信息存储在session,始终是无法存储的. 解决思路:先查看了代码逻辑(确证无误)- ...
- QQ空间|qq人气号怎么赚钱?
回报,付出的终极诉求,咱不论情怀. 在<怎么做一个QQ人气号>中,笔者大致提及,打造人气空间的流程,这里简单剖析下QQ人气空间的盈利模式. 关键词:转让,出售,广告,微商,合作,网红,接推 ...
- python在lxml中使用XPath语法进行#数据解析
在lxml中使用XPath语法: 获取所有li标签: from lxml import etree html = etree.parse('hello.html') print type(html) ...
- django_orm 基本操作
单表操作 增的操作: 一种方式:表名.objects.create(name='xxoo') 第二种方式:表名(name='xxoo') obj=表名(name='xxoo') obj.save() ...
- SaltStack error: No module named 'salt'
启动saltstack的时候出现下面的错误 问题原因 是因为我在centos7中安装了多版本的python导致的 解决方案 将文件下面文件首行更改成python2 [root@saltstack-12 ...