【C++】STL算法
STL算法
标签:c++
整理出头文件algorithm中的一些有趣的算法,仿佛打开了新世界的大门~~
一、不变序列算法
1、熟悉的min(), max()
2、找最值还自己动手么?不了不了
min_element
itetator min_element(iterator first, iterator last)
max_element
itetator max_element(iterator first, iterator last)
3、熟悉的find()和新学会的count()
二、变值算法
1、fill()函数,emmm放这充个数
三、变序算法
1、熟悉的reverse()函数
2、为啥不用rotate()
void rotate(iterator first, iterator newFirst, iterator last)
数组的循环右移,比如:
rotate(num, num, n, num + len)
得到的结果是:num[n], num[n + 1], ..., num[len - 1], num[1], num[2], ..., num[n - 1]
3、排列再也不用自己动手了
将排列按照字典序排序
prev_permutation
bool prev_permutation(iterator first, iterator last):改为上一个排列,如果当前排列已经是最小排列,返回false
next_permutation
bool next_permutation(iterator first, iterator last):改为下一个排列,如果当前排列已经是最大排列,返回false
4、快速排序干啥还要自己写partition()
partition()
iterator partition(iterator first, iterator last, Pred op):根据比较规则op(x)将区间划分,满足op(x) == true的放到x的前面,不满足的放在后面,返回的为满足op(x) == false的第一个迭代器,划分部分不保持原先的相对次序
stable_partition()
iterator stable_partition(iterator first, iterator last, Pred op):用法同上,划分部分保持原先的相对次序
实例:
将序列中的偶数放在前面,奇数放在后面
bool op(int n)
{
return !(n & 1);
}
partition(num, num + len, op);
四、排序算法
1、学会sort()走天下
2、stable_sort()和partial_sort()了解一下
stable_sort()用法同sort(),但是整体速度低于sort()
void partial_sort(iterator first, iterator mid, iterator last):\([first, mid)\)有序,并且其中任意的元素都不大于\([mid, last)\)中的元素,堆排序实现
3、妈妈再也不用担心我的堆写不好啦(大顶堆)
make_heap
void make_heap(iterator first, iterator last):将区间\([first, last)\)变为堆,复杂度为\(O(n)\)
push_heap
void push_heap(iterator first, iterator last):当区间\([first, last - 1)\)是堆时,末尾插入新的元素,再将区间\([first, last)\)调整为堆,复杂度为\(O(logn)\)
pop_heap
void pop_heap(iterator first, iterator last):将堆顶元素(即数组中的第一个元素)移动到末尾
sort_heap
void sort_heap(iterator first, iterator last):堆排序
五、有序区间算法
1、二分相关还说啥
lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置。
upper_bound(起始地址,结束地址,要查找的数值) 返回的是数值 最后一个 出现的位置。
binary_search(起始地址,结束地址,要查找的数值) 返回的是是否存在这么一个数,是一个bool值。
2、归并排序我也不动手啦
inplace_merge
void inplace_merge(iterator first, iterator mid, iterator last):原地合并,合并完后的区间为\([first, last)\)
对于归并排序,可以使用inplace_merge()函数,也可以直接用sort()
【C++】STL算法的更多相关文章
- STL算法
STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...
- 【STL源码学习】STL算法学习之四
排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择. 明细: sort 函数原型: template <class RandomAccessIter ...
- 【STL源码学习】STL算法学习之三
第一章:前言 数量不多,用到的时候会很爽. 第二章:明细 STL算法中的又一个分类:分割:将已有元素按照既定规则分割成两部分. is_partitioned 函数原型: template <c ...
- 【STL源码学习】STL算法学习之二
第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...
- 【转】三十分钟学会STL算法
转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...
- random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客
random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客 random_shuffle (stl算法)打乱顺序 2012-03-31 10:39:11| 分类: 算法 | ...
- STL源代码分析——STL算法remove删除算法
前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...
- STL源代码分析——STL算法merge合并算法
前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. ...
- STL源代码分析——STL算法sort排序算法
前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...
- 变易算法 - STL算法
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...
随机推荐
- mysql数据库,当数据类型是float时,查询居然查询不出数据来
mysql数据库,当数据类型是float时,查询居然查询不出数据来,类似如下: 以后mysql数据库不用float类型,而double类型可以查得出来.
- win10使用cmake配置fmt生成vs2015解决方案(fmt version 7.0.1)
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 本文仅为参考,请以实际情况为准, fmt版本: 7.0.1 准备 下载源码fmt : htt ...
- c++11之find 和 find_if 和 find_if_not 用法
时刻提醒自己 Note: vector的释放 0.头文件 #include <algorithm> 1.区别 返回范围 [first, last) 中满足特定判别标准的首个元素: 函数 功 ...
- 【LeetCode】1417. 重新格式化字符串 Reformat The String
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 栈 日期 题目地址:https://leetcode- ...
- java源码——统计字符串中字符出现的次数
对于任意输入的一段字符串,读取并且计算其中所有字符出现的次数. 使用HashMap存储字符和其对应的出现的次数,输出时,对HashMap进行遍历. 难点在于对HashMap的遍历,第一次使用,也是学习 ...
- SQL 行转列===列转行
行转列:sum+if 在长表的数据组织结构中,同一uid对应了多行,即每门课程一条记录,对应一组分数,而在宽表中需要将其变成同一uid下仅对应一行 在长表中,仅有一列记录了课程成绩,但在宽表中则每门课 ...
- 【Java例题】5.4 排序集合的使用
4.排序集合的使用.使用TreeSet模拟一个一维整数数组.其中,一维整数数组元素由Random类随机产生.最后显示排序后的结果. package chapter6; import java.util ...
- 第十九个知识点:Shamir密钥交换场景
第十九个知识点:Shamir密钥交换场景 Shamir密钥交换场景是一个被Adi Shamir提出的算法.算法允许多方分割一个密码,例如一个密钥.当足够多的秘密结合起来,整个密钥就被计算出来了. 正式 ...
- 第二十个知识点:Merkle-Damgaard hash函数如何构造
第二十个知识点:Merkle-Damgaard hash函数如何构造 这里讲的是MD变换,MD变换的全称为Merkle-Damgaard变换.我们平时接触的hash函数都是先构造出一个防碰撞的压缩函数 ...
- 小试国产开源HTAP分布式NewSQL数据库TiDB-v5.3.0
概述 定义 TiDB官网 https://pingcap.com/zh/ 最新版本为5.3.0 TiDB GitHub源码 https://github.com/pingcap/tidb TiDB是由 ...