在这篇中,我会讲几个简单易懂且比较常用的stl函数,这些函数在noip系列考试中往往被允许使用(既然让用我们自然不用手码了...)

(末尾有惊喜!)

1.sort

绝大部分刚入门的oier第一个接触的stl函数就是sort函数,这是一个简单而又快速的排序函数

通过内部集成的快速排序的代码,可以在O(nlogn)的时间内完成一个长度为n的数列的排序(默认排序方向为由小到大)

实现起来非常简单,代码就一行(例子为排序x[1]~x[5]):

sort(x+1,x+5+1);//x表示你要排序的数组名,x+1表示从1开始(因为数组开始的默认下标为0)         //x+5+1表示到5结束(为什么要+1呢?因为我们要等于5,如果不+1的话意思是小于5的,自然就没有x[5]了)

但同时,很多人会发现,你不是说这是默认由小到大的吗?我要从大到小该怎么办呢?

这时候我们有两种选择:你可以重载运算符,也可以写一个比较函数

(前一个比较麻烦,我在下面一个讲优先队列时说)

我在这里先说一下比较函数

顾名思义,这个比较函数的作用就是告诉sort函数,我在排序时要怎样对待每两个元素

我们可以看一下这个比较函数的主体:

有了这个,我们就能让sort随心所欲!

总结:

函数名:sort

用途:排序一个数组

头文件:#include<algorithm>

用法:sort(x+起始位置,x+终止位置+1,比较函数)(没有特殊需要比较函数可以省略)

2.优先队列

(在这个部分里,请大家默认将优先队列当成堆)

大家玩过堆排序吗?

优先队列,其实就是堆排序,不过用起来会更方便(和上面一样,一个函数与一行代码的区别)

和sort拿来就能用不同,由于这是一个队列,需要存东西,所以在使用前,我们需要声明一下

比如说我要开一个堆,那我要这么做:

很简单,不是吗?那我们又该如何使用这个队列呢?

下面我讲几个操作:

1.插入元素

我们可以这样写:

q.push(val);

q在这里代表队列名称,push是插入的意思,val则是你要插入的值

在这里我们要特别注意,val的类型必须和我们声明的优先队列的类型相同

(好像有时候队列定义是long long你插个int也无所谓),但如果你定义的是int,但你从插的是个double,那么这个double会被强制取整

如果你定义的是结构体,你直接插入结构体就行(队列会自动将结构体的每一个元素都插进去)

2.找堆顶

我们可以这样写:

int a=q.top();

这里的意思是定义一个整数为该堆的堆顶(不只是int,你定义的堆是什么类型,他就给你返回什么类型)

堆顶是什么取决于你如何重载运算符,(不过默认是大根堆)

3.删除堆顶

我们可以这样写:

q.pop();

这句话表示堆顶元素出队,然后程序会自动维护整个堆,使其仍满足堆的性质

4.查询堆的大小

我们可以这样写:

int a=q.size();

进行这个操作后a就代表堆的大小

该讲讲最重头的了——重载运算符

重载运算符的作用就是改变某个序列中符号的定义

首先明确,在优先队列里,由于他默认的是大根堆,所以我们重载大于号

依个人所见,如果你要将非结构体的大根堆变为小根堆,是不需要重载运算符的

我们只要在入队时取反,出队时取反即可(负负得正)

重载运算符,(我可能比较蒟蒻)一般重载的对象是结构体

我们一般这样写:

通过这样一个函数,我们可以改变结构体数组中某些符号的含义,自然两两比较方式也就发生了改变

这个堆自然也就可以比较别的东西了

总结:

头文件:#include<queue>

定义方法:priority_queue<int(数据类型)> q(队列名)

用途:进行堆排序,构建一个二叉堆(至于有了堆能干什么,就看你们了)

操作:

push():插入元素

top():返回堆顶元素的值

pop():删除堆顶元素

size():返回当前堆的大小

变形方式:重载运算符

3.杂项

本来这个地方想放vector的,但感觉好像并没有什么卵用,于是我讲一讲杂项。

【1】 memset 数组初始化操作:

memset功能强大,但我在这里只讲如何利用memset归零一个数组

看图:

就是这样,是不是很简单?

总结:

函数名:memset

头文件:#include<cstring>

用途:初始化数组

用法:memset(数组名,初始值,大小);

【2】 strlen字符数组长度统计

有的时候,我们会遇到需要读取一个不定长的字符串(比如说有的题让你匹配字符串,像kmp,hash之类的)

我们就需要用一点手段获取字符串的长度(当然,你别告我拿个循环跑,你多跑几次就发现代码行满了)

我们请出strlen()函数

这个函数的作用就是读取一个字符串,并返回这个字符串的长度

看图:

通过如上函数,我们可以解决字符串的长度问题。

总结一下:

函数名:strlen

头文件:#include<cstring>

用途:统计字符数组长度

用法:定义一个整数=strlen(你要统计长度的数列)

入门级c++stl到此结束,其实比较简单的还有vector(变长数组),set(平衡树,内部实现是一棵红黑树),map(映射,表示两个数据间的关系),为了对新手更为友好,我就暂时不讲。

转载于:https://www.cnblogs.com/ztz11/p/9296584.html

c++stl应用入门相关推荐

  1. STL快速入门学习教程之map的简单使用

    STL快速入门学习教程之map的简单使用 map是STL中的一个关联容器,它以一对一的数据进行整理(第一个数值称为关键字,且这个关键字只能在map中出现一次,第二个数值称为前关键字的值),正是由于这种 ...

  2. STL教程:C++ STL快速入门

    目录 1.STL引言 2.STL是什么(STL简介) 3.STL历史 4.STL组件 5.STL基本结构 6.STL 使用方法 7.STL目录 网址:STL教程:C++ STL快速入门(非常详细) 第 ...

  3. 泛型模板和STL语法入门

    泛型模板和STL语法入门 STL简介 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov. ...

  4. C++ STL快速入门

    在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ STL后发现这些数据结构都已经给我提供好了,我直接拿去调用就 ...

  5. string类的erase函数属于stl吗_C++ STL快速入门

    C++ STL中最基本以及最常用的类或容器无非就是以下几个:在数月之前的机试中第一次体验到STL的威力,因为自己本来一直在用C语言做开发,很多数据结构都是自己造的,比如链表.队列等,第一次接触C++ ...

  6. STL算法入门基础【OI缩水版】

    2018.5.21 文章比较长,写的也比较垃圾,而且还没写完,超级占坑... 推荐选择性阅读您需要的,或者直接看最后的参考链接,指向其他大佬的博客. 0x00 前言 Standard Template ...

  7. c语言stl用法,C STL快速入门!学习使我快乐

    C++ STL中最基本以及最常用的类或容器无非就是以下几个: ▶ string ▶ vector ▶ set ▶ list ▶ map 下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速 ...

  8. C++:STL标准入门汇总

    学无止境!!! 第一部分:(参考百度百科) 一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Ste ...

  9. 【STL学习指南】STL的入门学习指南

    目录 STL 学习指南 一. STL基础 二. C++ STL 容器 1 序列式容器 1.1 array 1.2 vector 1.3 deque 1.4 list 2 关联式容器 2.1 map 2 ...

最新文章

  1. ctrl键一直自动按住了_用好Ctrl键,年薪一两万
  2. php tar.gz文件,PHP解压tar.gz格式文件的方法,_PHP教程
  3. mysql将最大金额加1000_Mysql数据库笔记
  4. 如果手里有20万是放银行吃利息还是投资比较合适?
  5. 计算机保研面试题总汇(网上搜集的题 自己写的答案)
  6. 热血江湖游戏窗口化的方法
  7. linux给普通用户添加管理员权限,linux 赋予普通用户管理员权限
  8. Qt 之 QQ系统表情(二)
  9. gg 修改器游戏被保护_GG修改器使用教程
  10. 龙芯2F一体机硬盘修复
  11. 为什么Multi-DRM如此重要?
  12. Jacobi迭代法分量形式matlab,实验4 Jacobi迭代法和GS迭代
  13. python将object转换为float_object格式怎样无损转换成float64格式
  14. C语言打开中文路径文件
  15. 《中国新闻周刊》报道:施一公深陷泥潭
  16. 构筑自有流量池,电商宝SCRM(微信公众号和个人号管家)助力企业打赢粉丝争夺战...
  17. 剑指offer每日六题---------day five
  18. (回环检测)Scan Context++: Structural Place Recognition Robust to Rotation and Lateral Variations in Urba
  19. 游戏3D建模师职业生涯规划,年薪百万学习路线
  20. NVDIA Jetson TX2软件介绍

热门文章

  1. 专家解读EdgeRoutine边缘程序
  2. 学习Java软件开发该从何入手
  3. 祖龙娱乐王远明:如何用UE4做出3A级材质和天气系统?
  4. Unity Gamma校正转为线性空间
  5. 第九届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
  6. oracle cluster(簇)的简单使用
  7. windows快捷键十八式(win10)
  8. java八种排序算法---直接插入排序
  9. CSS公共清除浏览器默认样式
  10. js 前加分号和感叹号的含义