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()走天下

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算法的更多相关文章

  1. STL算法

    STL算法部分主要由头文 件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包含头文件<algorit ...

  2. 【STL源码学习】STL算法学习之四

    排序算法是STL算法中相当常用的一个类别,包括部分排序和全部排序算法,依据效率和应用场景进行选择. 明细: sort 函数原型: template <class RandomAccessIter ...

  3. 【STL源码学习】STL算法学习之三

    第一章:前言 数量不多,用到的时候会很爽. 第二章:明细 STL算法中的又一个分类:分割:将已有元素按照既定规则分割成两部分.  is_partitioned 函数原型: template <c ...

  4. 【STL源码学习】STL算法学习之二

    第一章:前言 学习笔记,记录学习STL算法的一些个人所得,在以后想用的时候可以快速拾起. 第二章:明细 copy 函数原型: template <class InputIterator, cla ...

  5. 【转】三十分钟学会STL算法

    转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...

  6. random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客

    random_shuffle (stl算法)打乱顺序 - 飞不会的日志 - 网易博客 random_shuffle (stl算法)打乱顺序 2012-03-31 10:39:11|  分类: 算法 | ...

  7. STL源代码分析——STL算法remove删除算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多.不方便学习,也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的remove删除算法. ...

  8. STL源代码分析——STL算法merge合并算法

    前言 因为在前文的<STL算法剖析>中.源代码剖析许多.不方便学习.也不方便以后复习,这里把这些算法进行归类.对他们单独的源代码剖析进行解说.本文介绍的STL算法中的merge合并算法. ...

  9. STL源代码分析——STL算法sort排序算法

    前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SG ...

  10. 变易算法 - STL算法

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/mutating-algorithms.h ...

随机推荐

  1. java 输入输出IO流 RandomAccessFile文件的任意文件指针位置地方来读写数据

    RandomAccessFile的介绍: RandomAccessFile是Java输入输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出 ...

  2. SpringBoot项目给静态变量static注入@Value

    @value不能直接注入值给静态属性,spring 不允许/不支持把值注入到静态变量中:spring支持set方法注入,我们可以利用非静态setter 方法注入静态变量 @Component publ ...

  3. 出现线上bug,测试人能做些什么?

    测试奇谭,BUG不见. 大家好,我是谭叔. 一提到线上问题,很多测试小白要么"原则性"恐惧,要么憨憨如也,不知如何下手. 本篇文章,我再细化下这道常见的面试题,跟大家捋捋发生线上问 ...

  4. c++之一个方便的日志库

    概述 本文演示环境: win10 + vs2017 日志,我用的很少,通常是用作动态库调试使用. 日志记录下来,基本就没看过,除非模块出现了问题. 使用cmake管理的项目 使用C++封装了C语言读写 ...

  5. _MSC_VER值对应的Visual Studio版本

    移步官网查看更多定义 1. 关于 今天使用cmake需要判断_MSC_VER的值是多少,额,官网查了下,还真不少 2. 查看 用下面的代码可以输出宏_MSC_VER的值 #pragma once #i ...

  6. 【LeetCode】56. Merge Intervals 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. 【LeetCode】203. Remove Linked List Elements 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 递归 日期 题目地址:https://lee ...

  8. 【LeetCode】435. Non-overlapping Intervals 解题报告(Python)

    [LeetCode]435. Non-overlapping Intervals 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemi ...

  9. 最大流问题的Ford-Fulkerson模板

    详细讲解:http://blog.csdn.net/smartxxyx/article/details/9293665 下面贴上我的第一道最大流的题: hdu3549 1 #include<st ...

  10. misc之压缩文件处理

    misc之压缩文件处理 一.预备知识 1.头文件名代码   二.实验环境 1.winhex   三.题目来源 攻防世界杂项:János-the-Ripper.再见李华   实验一 打开题目文件是一个压 ...