【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》
目录
五、queue的常见用法
六、priority_queue的常见用法
七、stack的常见用法
八、algorithm头文件下的常用函数
五、queue的常见用法
queue也就是队列,是STL中实现先进先出的容器。queue是在当需要实现BFS的时候,可以不用自己去手动实现一个队列,而是用queue作为代替,提高代码的准确性。另外要注意的一点是,在使用front()和back()函数之前,需要判断queue是否为空。
- queue的定义:
/* queue的定义在STL中比较常规:添加头文件#include <queue>并且在头文件下边加上using namespace std;然后就可以使用了。使用模式是queue<typename> name; */ queue<int> q;
- queue的访问:
/* STL中只能通过front()来访问队首元素,或者通过back()函数来访问队尾元素 */ printf("%d %d\n",q.front(),q.back());
- push()函数:
/* push(x)将x进行入队 */ q.push(x);
- front()和back():
/* front()函数获得队首元素,back()函数获得队尾元素 */printf("%d %d\n",q.front(),q.back());
- pop()函数:
/* pop()函数用于让队首元素出队 */printf("%d\n",q.pop());
- empty()函数:
/* empty()函数检查队列是否为空,返回bool类型,true是空,false是非空 */if(!q.empty()){……; }
六、priority_queue的常见用法
priority_queue又称为优先队列,其底层是利用堆实现的。在priority_queue中,队首元素一定是优先级最高的元素,任何时间向priority_queue中push元素都会随时调整结构,使得每次的队首元素都是优先级最大的。priority_queue可以解决一些贪心问题,也可以对Dijkstra算法进行优化。
- priority_queue的定义:
/* priority_queue的定义在STL中比较常规:添加头文件#include <queue>并且在头文件下边加上using namespace std;然后就可以使用了。使用模式是priority_queue<typename> name; */ priority_queue<int> q;
- priority_queue容器内元素的访问:
/*priority_queue没有front()函数和back()函数,只能通过top()函数来访问队首元素,也就是优先级最高的元素*/printf("%d",q.top());
- push()函数:
/* push(x)将x进行入队 */ q.push(x);
- top()函数:
/*top()函数获得队首元素*/printf("%d",q.top());
- pop()函数:
/* pop()函数就是令队首元素出队的元素,就是优先级最高的元素 */q.pop();
- empty()函数:
/*empty()函数检测priority_queue是否为空,空返回true,非空返回false;*/if(q.empty()==true)if(!q.empty())
priority_queue内元素优先级的设置:
- 基本数据类型 的优先级设置
/* 以下两则等价,less<int>表示数字大的优先级大,而greater<int>表示数字小的优先级大 */ priority_queue<int> q; priority_queue<int,vector<int>,less<int> > q;/*----------------------------------------------------------*/priority_queue<int,vector<int>,greater<int> > q;
结构体优先级设置
/*举个栗子帮助理解*//* 价格大的优先级大,与sort函数定义相反 */ struct fruit{string name;int price;friend bool operator < (fruit f1,fruit f2){return f1.price < f2.price;//return f1.price > f2.price; 价格大的优先级小} }/*-------------------------------------------------------------*/ /*除了上面一种办法,还有一种办法表示*/struct fruit{string name;int price; } struct cmp{bool operator ()(fruit f1,fruit f2){return f1.price < f2.price;//return f1.price > f2.price; 价格大的优先级小 }/*引用*/ priority_queue<fruit, vector<int>,cmp> q;/*即使是基本数据类型或者其他STL容器(如set),也可以通过同样的方式来定义优先级*/ friend bool operator < (const fruit &f1,const fruit &f2){return f1.price >f2.price; }bool operator () (const fruit &f1,const fruit &f2){return f1.price > f2.price; }
七、stack的常见用法
栈,后进先出(FILO)
- stack的定义:
/*定义一个stack需要添加头文件#include <stack>以及在头文件下方加上using namespace std;stack<int> st; */stack<int> st;
- stack容器内的元素访问:
/*只能通过top()函数来访问栈顶元素*/st.top();
- push()函数:
/*push(x)将x入栈*/st.push(1);
- top()函数:
/*top()函数获得栈顶元素*/st.top();
- pop()函数:
/*使用pop()函数弹出栈顶元素*/st.pop();
- empty()函数:
/*empty()可以检测stack内是否为空,true为空,false为非空*/if(st.enpty()==true)
- size()函数:
/*通过size()函数来获得栈的元素个数*/st.size();
八、algorithm头文件下的常用函数
- max()/min()/abs():
max(x,y); //返回x,y中的最大值 min(x,y); //返回x,y中的最小值 abs(x); //返回x的绝对值
- swap():
swap(x,y); //交换x和y的值
- reverse():
//可以将数组指针在[it,it2)之间的元素或容器的迭代器在[it,it2)范围内进行反转 reverse(it,it2); /*数组反转*/int a[10]={1,2,3,4,5,6,7,8,9,0}; reverse(a,a+4);/*容器反转*/ string str="3843264872"; reverse(str.begin(),str.begin()+9);
- next_permutation():
/*next_permutation()全排列*/ int a[3]={1,2,3}; do{printf("%d %d %d\n",a[0],a[1],a[2]); }while(next_permutation(a,a+3));/* 123 132 213 231 312 321 */
- fill():
/* fill()可以把数组或容器中的某一段区间赋值为某个值 */ fill(a,a+4,233);
- sort():
/*sort(元素首地址(必填),尾地址的下一个地址(必填),比较函数(非必填))比较函数如果不填,则默认为增序排列结构体排序bool cmp(node a,node b){return a.x<b.x; }*/
【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》相关推荐
- 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》
目 录 一.vector的常见用法 二.set的常见用法 三.string的常见用法 四.map的常见用法 一.vector的常见用法 vector是一种可变长数组,常用于使用vector通过 ...
- 【2019暑假刷题笔记-图的存储和图的遍历】绪论(代码模板-总结自《算法笔记》)
一.图的存储 图有两种存储办法,分别是邻接矩阵(顶点数≤1000,0表示不连通,数字表示权重)和邻接表(用vector数组实现),具体实现如下: /* 邻接矩阵,G[][] */G[2][3]=1; ...
- 【2019暑假刷题笔记-树的遍历】总结
关于树这一块,前期没有做一个学习的绪论,因为时间来不及了.在总结上回顾一下这些题目的一些特点 树的遍历的是数据结构树这一块中的一部分. 树的遍历和二叉树的遍历本质上相同.二叉树用指针也可以做,但是在考 ...
- 【2019暑假刷题笔记-链表】总结自《算法笔记》
目 录 一.创建链表节点 二.创建链表 三.创建链表 四.查找元素 五.插入元素 六.删除元素 七.静态链表 一.创建链表节点 /* struct node{typename data; //数据域 ...
- codeup刷题2.1~2.4小节 ——《算法笔记》(胡凡)
例题1-1-1 按要求输出信息(1) 题目描述: 编写一个C程序,要求在屏幕上输出一下一行信息. This is my first c program! 输入: 无 输出: This is my fi ...
- $2019$ 暑期刷题记录 $2$(基本算法专题)
$ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...
- C语言刷题之动态规划进阶(二)
目录 1.前言 2.最大子矩阵 1.题目 2.初步分析 3.代码实现 3.龙与地下城游戏问题 1.题目 2.初步分析 3.代码实现 4.过河 1.题目 2.初步分析 3.代码实现 1.前言 读者们好, ...
- 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先
前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...
- Leetcode刷题日记(十二)
又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...
最新文章
- mac搭建appium自动化之testNG
- boost::hana::drop_while用法的测试程序
- 如何判断当前系统使用了share memory作为design layer processing
- sklearn 安装_初识sklearn
- 关于webservice(CXF)的一些理解
- Hibernate,Ibatis,Jdbc 区别
- 微软自带的浏览器Microsoft Edge不能上网的解决办法
- nginx html目录 404 盘符_nginx配置场景分析 location /
- aspose-cell 使用
- (转)Windows Form Application 读取并修改App.config文件
- amesim子模型_Amesim液压管道子模型(一):子模型的区别
- 元气骑士如何获得机器人成就皮肤_《元气骑士》听过浮游炮大礼包吗?有利于快速获取机器人的皮肤!...
- 华为开源平台harmonyos,华为开源平台上线 方舟编译器和鸿蒙系统开源
- GTS全局事务测试-单DRDS跨库事务
- MAC 下 解决ZOC 自动断开
- 修理牧场(哈夫曼树)
- 前后端离线开发相关软件下载地址大全
- windows下安装cygwin+swoole教程
- ESP8266 AP模式热点
- 虚拟机显示网络不可用