简介

algorithm头文件是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。

算法类别

如上图所示,库中的算法主要分为4类:

非修改性顺序操作(Non-modifying sequence operations)

可变顺序操作(Mutating sequence operations)

排序和关系操作(Sorting and related operations)

C库算法(C library algorithms)

用过这个算法库的人都知道,里面的很多算法都是成对出现的,一个概念的算法经常有多个版本:

in-place version: 普通版本,直接操作对迭代器进行操作。

copying version: 拷贝版本,需要传入输出迭代器作为拷贝的destination。 该版本一般带有copy字样。

predicate version: 谓词版本,需要传入谓词作为判断的标准。 该版本一般带有if字样。

Non-modifying sequence operations

all_of : 判断是否范围内的所有元素都满足条件。

any_of : 判断是否范围内的所有元素中有一个满足条件。

none_of : 判断是否范围内的所有元素中没有一个满足条件。

for_each : 对指定范围内的每一个元素进行指定的操作。

find、find_if、find_if_not : 在指定范围中查找满足某个条件(值相等、条件满足、条件不满足)的元素。

find_end : 在指定序列中查找最后一个相等(或满足谓词条件)子序列。

find_first_of : 在指定序列中查找第一个出现在另一个序列中(或满足谓词条件)的元素。

adjacent_find : 在指定序列中查找第一个相等(值相等、满足条件)的元素对(2个元素)。

count、count_if : 对制定序列中的满足条件(值相等、满足条件)的元素进行计数。

mismatch : 给定两个元素序列,返回第一个不匹配(值不相等、不满足条件)的元素位置,以一个迭代器对指出。

equal : 判断两个序列是否相等(值相等、满足谓词条件)。

is_permutation : 判断是否一个序列是另一个序列的排列,即只有排列方式不相等(值不相等、不满足谓词条件)。

search、search_n : 在给定序列中查找子序列或者n个重复的元素序列。

Mutating sequence operations

copy、copy_n、copy_if、copy_backward : 拷贝序列、拷贝序列中前n个元素、拷贝序列中满足条件的、从后往前拷贝序列。

move、move_backward : 移动序列、从后往前移动序列(移动后,任然可以对源序列进行操作,但元素值是未指定的)。

swap、iter_swap : 逐元素交换序列、交换两个序列。

transform : 对一个 序列进行变换并输出、对两个序列进行变换并输出(变换通过自定义谓词来实现)。

replace、replace_if、replace_copy、replace_copy_if : 替换满足条件(值相等、满足谓词条件)的元素为给定元素、替换满足条件的元素并将其拷贝至别处。

fill、fill_n : 将给定序列元素填充为给定值、 将给定的前n个元素填充为给定值。

generate、generate_n : 用自定义的生成器生成元素,并将这些元素赋值给给定序列或前n个序列。

remove、remove_if : 移除相等或满足谓词条件的元素。 注意,若有元素被移除,指向这些元素之后的迭代器的可以使用,但结果是未指定的(unspecified)。

unique、unique_copy : 使序列唯一(即若有重复元素,保留第一个,其余全部移除)、是序列唯一并拷贝至目的地。

reverse、reverse_copy : 将给定序列逆转、将给定序列逆转并拷贝至目的地。

rotate、rotate_copy : 将给定序列左旋转(middle - first)个元素、将给定序列左旋转(middle - first)个元素并拷贝。

shuffle : 使用均匀随机数生成器将给定序列洗牌(即打乱,重新分布)。

下面几个函数有关分区的同一方面,但又功能却不想上面所列那么相似,故而分开叙述:

is_partition : 用给定的一元谓词判断给定序列是否被正确分区(即前一部分元素调用谓词返回true,后一部分返回false)。

partition : 对给定序列进行分区操作。

stable_partition : 与partition操作相似,但是两个group(即分区成的两个分区)内元素的相关顺序保持不变(stable)。

partition_copy : 与partition相似,但是两个分区group结果被拷贝到两个指定的位置。

partition_point : 返回分区点,该点之前、该点之后(包括该点)分别为两个分区。

Sorting and related operations

这些函数都有两个版本:使用operator < 的、使用函数子Compare的。

sort : 排序。

stable_sort : 稳定排序。

partial_sort : 部分排序,对于给定的序列,只排序前middle - first个元素,并将它们放置在[first, middle)范围中,剩余位置的元素顺序为指定。

partial_sort_copy : paartial_sort函数的copy版本。

is_sorted、is_sorted_util : 判断给定序列是否为已排序(使用operator < 或 自定义函数子判断)的。

nth_element : 将nth迭代器指定的位置排序为结果元素。(实际上应该是使用快排实现的)

lower_bound、upper_bound、equal_range : 返回下界、上界、相等性范围。

binary_search : 在给定序列中对元素进行二分查找。

merge、inplace_merge : 合并两个序列并输出。

includes : 判断是否一个序列重的所有元素都被包含在另一个序列中。

set_union : 并集。

set_intersection : 交集。

set_difference : 差集。

set_symmetric_difference : 对称差集。

push_heap : 将一个元素push进由序列表示的heap中,并维持堆得性质。

pop_heap : 将一个元素从heap中pop(实际上被交换到尾部)。

make_heap : 将给定序列构造成heap。

sort_heap : 对给定堆进行排序(可能有特殊的算法对堆排序进行优化)。

is_heap、is_heap_util : 判断给定序列是否为堆、判断给定序列到哪个位置之前为堆。

min、max : 返回最小值、最大值。

minmax : 返回pair

min_element、max_element : 返回序列中第一个最小值、最大值。

minmax_element : 返回pair

lexicographical_compare : 对两个序列进行字典序排序。

next_permutation、prev_permutation : 判断给定序列是否存在下一个或者上一个组合(所有可能的排列组合先由字典序排序,再进行判断)。

C library algorithms

该头文件还包含了标准C头文件stdlib.h,大体相同。 只是出于与C兼容的目的,bsearch 和 qsort同时包含了C和C++的两个函数签名。

c语言 compare 头文件,简单谈谈C++ 头文件系列之(algorithm)相关推荐

  1. 简单谈谈linux的文件权限问题

    目录 首先学习几个改变文件权限的命令: 文件权限 目录权限 修改权限 写在最后 首先学习几个改变文件权限的命令: 改变文件权限: chmod [-R] [权限]文件或目录 文件权限 用cxf用户创建一 ...

  2. c语言有algorithm头文件吗,简单谈谈C++ 头文件系列之(algorithm)

    简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...

  3. dll文件用什么语言编写_零基础学习markdown标记语言语法,十分简单便捷编写markdown文件...

    引言:在完成了使用开源的Atom软件搭建好编写markdown的环境后,接下来就进行我们的第一个markdown文件的编写,同时学习markdown标记语言的基础语法,都是十分简单的一些标记,如果学习 ...

  4. 首次打开文件简单分析

    首次打开文件简单分析 @(OS) 打开文件是一个合作的过程.具体的过程有open–read. 其中特别注意,这两个操作都是系统调用!用户进程只是把打开文件这个需求发到操作系统,操作系统就根据要求完成这 ...

  5. 能否用痰盂盛饭——谈谈在头文件中定义外部变量

    能否用痰盂盛饭--谈谈在头文件中定义外部变量 - garbageMan - 博客园 能否用痰盂盛饭--谈谈在头文件中定义外部变量 "能否用痰盂盛饭"并非是一个技术问题,而是一个哲学 ...

  6. c语言中的头文件stdlib.h的作用,C语言中你可能不熟悉的头文件(stdlib.h)

    C语言中你可能不熟悉的头文件(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) 此头文件定义了一些通用功能函数 ...

  7. c语言自动创建的main,c语言main.c文件简单解析

    屏幕快照 2016-05-29 15.40.53.png 下面我们针对上述代码做一个简单的解析 ========================= 一.#include 1.#include 是c语言 ...

  8. c51语言的标准库函的头文件,C51编程中头文件的使用

    头文件在C51的编程中是不可缺少的部分.本文将对keil C中常用头文件予以说明,并就如何编写头文件进行初步介绍. 一.C51常见本征函数库 一些常见的头文件都是keil C自带的,在安装目录下的C5 ...

  9. c语言变量在头文件定义变量吗,在头文件C中声明变量

    参见英文答案 > What should go into an .h file?                                    12个 我正在尝试创建一个简单的程序,使用 ...

最新文章

  1. 【青少年编程竞赛交流】10月份微信图文索引
  2. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
  3. mysql将字符转换成数字
  4. 神经网络算法的相关知识
  5. LeetCode 535. TinyURL 的加密与解密(哈希)
  6. Spire.Doc for Java的jar包、maven库-全套free资源
  7. Java 计算数学表达式(字符串解析求值工具)
  8. 大数据的5个“小观点 ”(转)
  9. EasyPR--中文车牌识别系统 开发详解(开源)
  10. Spark提交任务到集群
  11. POJ3080Blue Jeans
  12. 创维E900V22C、E900V22D_S905L3A_安卓9.0_精简卡刷通刷固件包
  13. DOCKER镜像仓库地址
  14. MDI Jade6.5安装教程-附安装包
  15. WordPress发布插件,WordPress定时采集伪原创发布插件
  16. 计算机辅助设计和工程图学,工程制图与计算机辅助设计
  17. 什么是DNS Spoofing, DNS Hijacking, and DNS Cache Poisoning?
  18. VOC数据集格式介绍
  19. Python计算最大回撤、回撤天数
  20. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

热门文章

  1. CRM-首页--待办数据统计(接口实现)
  2. 新浪股票接口 php,curl实例-通过新浪股票接口获取股票信息
  3. 分布式系统的设计原则
  4. 京麦微信小程序圣诞抽奖项目的架构设计
  5. 吴恩达深度学习 | (15) 结构化机器学习项目专项课程第二周学习笔记
  6. 程序员化身“侦探”,识破 AI 律所骗局
  7. 200 smart和博图wincc做项目
  8. 禾穗HERS | 去你的PUA!
  9. Threejs 官网 - 入门指南(Getting Started)
  10. 吐血总结软件实施面试,很简单,三天上岸