目录

五、queue的常见用法

六、priority_queue的常见用法

七、stack的常见用法

八、algorithm头文件下的常用函数


五、queue的常见用法

queue也就是队列,是STL中实现先进先出的容器。queue是在当需要实现BFS的时候,可以不用自己去手动实现一个队列,而是用queue作为代替,提高代码的准确性。另外要注意的一点是,在使用front()和back()函数之前,需要判断queue是否为空。

  1. queue的定义:

    /*
    queue的定义在STL中比较常规:添加头文件#include <queue>并且在头文件下边加上using namespace std;然后就可以使用了。使用模式是queue<typename> name;
    */
    queue<int> q;
    
  2. queue的访问:
    /*
    STL中只能通过front()来访问队首元素,或者通过back()函数来访问队尾元素
    */
    printf("%d %d\n",q.front(),q.back());
  3. push()函数:
    /*
    push(x)将x进行入队
    */
    q.push(x);
  4. front()和back():
    /*
    front()函数获得队首元素,back()函数获得队尾元素
    */printf("%d %d\n",q.front(),q.back());
  5. pop()函数:
    /*
    pop()函数用于让队首元素出队
    */printf("%d\n",q.pop());
  6. empty()函数:
    /*
    empty()函数检查队列是否为空,返回bool类型,true是空,false是非空
    */if(!q.empty()){……;
    }

六、priority_queue的常见用法

priority_queue又称为优先队列,其底层是利用实现的。在priority_queue中,队首元素一定是优先级最高的元素,任何时间向priority_queue中push元素都会随时调整结构,使得每次的队首元素都是优先级最大的。priority_queue可以解决一些贪心问题,也可以对Dijkstra算法进行优化。

  1. priority_queue的定义:

    /*
    priority_queue的定义在STL中比较常规:添加头文件#include <queue>并且在头文件下边加上using namespace std;然后就可以使用了。使用模式是priority_queue<typename> name;
    */
    priority_queue<int> q;
    
  2. priority_queue容器内元素的访问:
    /*priority_queue没有front()函数和back()函数,只能通过top()函数来访问队首元素,也就是优先级最高的元素*/printf("%d",q.top());
  3. push()函数:
    /*
    push(x)将x进行入队
    */
    q.push(x);
  4. top()函数:
    /*top()函数获得队首元素*/printf("%d",q.top());
  5. pop()函数:
    /*
    pop()函数就是令队首元素出队的元素,就是优先级最高的元素
    */q.pop();
  6. empty()函数:
    /*empty()函数检测priority_queue是否为空,空返回true,非空返回false;*/if(q.empty()==true)if(!q.empty())

priority_queue内元素优先级的设置:

  1. 基本数据类型 的优先级设置

    /*
    以下两则等价,less<int>表示数字大的优先级大,而greater<int>表示数字小的优先级大
    */
    priority_queue<int> q;
    priority_queue<int,vector<int>,less<int> > q;/*----------------------------------------------------------*/priority_queue<int,vector<int>,greater<int> > q;
  2. 结构体优先级设置

    /*举个栗子帮助理解*//*
    价格大的优先级大,与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)

  1. stack的定义:

    /*定义一个stack需要添加头文件#include <stack>以及在头文件下方加上using namespace std;stack<int> st;
    */stack<int> st;
  2. stack容器内的元素访问:
    /*只能通过top()函数来访问栈顶元素*/st.top();
  3. push()函数:
    /*push(x)将x入栈*/st.push(1);
  4. top()函数:
    /*top()函数获得栈顶元素*/st.top();
  5. pop()函数:
    /*使用pop()函数弹出栈顶元素*/st.pop();
  6. empty()函数:
    /*empty()可以检测stack内是否为空,true为空,false为非空*/if(st.enpty()==true)
  7. size()函数:
    /*通过size()函数来获得栈的元素个数*/st.size();

八、algorithm头文件下的常用函数

  1. max()/min()/abs():

    max(x,y);  //返回x,y中的最大值
    min(x,y);  //返回x,y中的最小值
    abs(x);   //返回x的绝对值
    
  2. swap():
    swap(x,y); //交换x和y的值
  3. 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);
    
  4. 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
    */
    
  5. fill():
    /*
    fill()可以把数组或容器中的某一段区间赋值为某个值
    */
    fill(a,a+4,233);
  6. sort():
    /*sort(元素首地址(必填),尾地址的下一个地址(必填),比较函数(非必填))比较函数如果不填,则默认为增序排列结构体排序bool cmp(node a,node b){return a.x<b.x;
    }*/
    

【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》相关推荐

  1. 【2019暑假刷题笔记-STL绪论】总结自《算法笔记》

    目     录 一.vector的常见用法 二.set的常见用法 三.string的常见用法 四.map的常见用法 一.vector的常见用法 vector是一种可变长数组,常用于使用vector通过 ...

  2. 【2019暑假刷题笔记-图的存储和图的遍历】绪论(代码模板-总结自《算法笔记》)

    一.图的存储 图有两种存储办法,分别是邻接矩阵(顶点数≤1000,0表示不连通,数字表示权重)和邻接表(用vector数组实现),具体实现如下: /* 邻接矩阵,G[][] */G[2][3]=1; ...

  3. 【2019暑假刷题笔记-树的遍历】总结

    关于树这一块,前期没有做一个学习的绪论,因为时间来不及了.在总结上回顾一下这些题目的一些特点 树的遍历的是数据结构树这一块中的一部分. 树的遍历和二叉树的遍历本质上相同.二叉树用指针也可以做,但是在考 ...

  4. 【2019暑假刷题笔记-链表】总结自《算法笔记》

    目  录 一.创建链表节点 二.创建链表 三.创建链表 四.查找元素 五.插入元素 六.删除元素 七.静态链表 一.创建链表节点 /* struct node{typename data; //数据域 ...

  5. codeup刷题2.1~2.4小节 ——《算法笔记》(胡凡)

    例题1-1-1 按要求输出信息(1) 题目描述: 编写一个C程序,要求在屏幕上输出一下一行信息. This is my first c program! 输入: 无 输出: This is my fi ...

  6. $2019$ 暑期刷题记录 $2$(基本算法专题)

    $ 2019 $ 暑期刷题记录 $ 2 $ (基本算法专题) $ by~~wch $ $ BZOJ~1958~Strange~Towers~of~Hanoi $ (动态规划,递推) 题目大意: 求有 ...

  7. C语言刷题之动态规划进阶(二)

    目录 1.前言 2.最大子矩阵 1.题目 2.初步分析 3.代码实现 3.龙与地下城游戏问题 1.题目 2.初步分析 3.代码实现 4.过河 1.题目 2.初步分析 3.代码实现 1.前言 读者们好, ...

  8. 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先

    前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...

  9. Leetcode刷题日记(十二)

    又是老台词:欢迎大家来到一晚一度的leetcode刷题日记时间.今天我们来讲讲队列的问题,队列这方面的基础知识需要的同学到博主前面的文章找吧.队列这方面的问题平时博主也是接触得比较少的.下面是一道利用 ...

最新文章

  1. mac搭建appium自动化之testNG
  2. boost::hana::drop_while用法的测试程序
  3. 如何判断当前系统使用了share memory作为design layer processing
  4. sklearn 安装_初识sklearn
  5. 关于webservice(CXF)的一些理解
  6. Hibernate,Ibatis,Jdbc 区别
  7. 微软自带的浏览器Microsoft Edge不能上网的解决办法
  8. nginx html目录 404 盘符_nginx配置场景分析 location /
  9. aspose-cell 使用
  10. (转)Windows Form Application 读取并修改App.config文件
  11. amesim子模型_Amesim液压管道子模型(一):子模型的区别
  12. 元气骑士如何获得机器人成就皮肤_《元气骑士》听过浮游炮大礼包吗?有利于快速获取机器人的皮肤!...
  13. 华为开源平台harmonyos,华为开源平台上线 方舟编译器和鸿蒙系统开源
  14. GTS全局事务测试-单DRDS跨库事务
  15. MAC 下 解决ZOC 自动断开
  16. 修理牧场(哈夫曼树)
  17. 前后端离线开发相关软件下载地址大全
  18. windows下安装cygwin+swoole教程
  19. ESP8266 AP模式热点
  20. 虚拟机显示网络不可用

热门文章

  1. 事务内容postgresql pgbench
  2. Silverlight - Out of Browser配置,安装和卸载
  3. 对于数字特征的若干理解
  4. (chap9 基于HTTP的功能追加协议) HTTP瓶颈
  5. 【Python小游戏】扫雷游戏竟有世界排行榜,中国90后00后霸占半壁江山?
  6. buu 凯撒?替换?呵呵!
  7. 【Flask项目】sqlalchemy原生sql查询,返回字典形式数据
  8. ARMV8虚拟中断的介绍
  9. [思考]-ARM LR寄存器的思考
  10. 【安全漏洞】浅谈Bypass Waf (基础-实战)