C++ 11 特性:<algorithm>中的算法

来源:互联网 发布:ui和美工哪个工资高 编辑:程序博客网 时间:2024/06/03 22:59

参考文献:《C++ Primer》


一、algorithm介绍

algorithm译为算法,提供了大量基于迭代器的非成员模版函数。本文将尽可能全面的讲解algorithm头文件下的算法以及使用。


二、说明

  • benend表示元素范围的迭代器
  • ben2表示第二个输入序列开始位置的迭代器,end2表示第二个输入序列的末尾位置。若没有end2的话,则第一个输入序列的长度与第二个输入序列的长度一致。
  • dest表示目的序列的迭代器。对于给定输入序列,算法需要生成多少元素,目的序列必须保证能保存同样多的元素。
  • unaryPredbinaryPred是一元与二元谓词。
  • unaryOpbinaryOp是可调用对象,可分别使用来自输入序列的一个和两个实参来调用。

三、算法

1.查找对象的算法


1.1 简单查找

函数名称 find (beg, end, val) find_if (beg, end, unaryPred) find_if_not (beg, end, unaryPred) count (beg, end, val) count _if (beg, end, unaryPred)


find 返回一个迭代器,指向输入序列中第一个等于val的元素。
find_if 返回一个迭代器,指向输入序列中第一个满足unaryPred的元素。
find_if_not 返回一个迭代器,指向输入序列中第一个不满足unaryPred的元素。
count 返回一个计数器,指出val出现的次数。
count_if 返回一个计数器,指出满足unaryPred的元素的个数。

函数名称 all_of (beg, end, unaryPred) any_of (beg, end, unaryPred) none_of (beg, end, unaryPred)


all_of 返回一个bool值,unaryPred对所有元素都满足,则返回true。如果序列为空也返回true,否则返回false。
any_of 返回一个bool值,unaryPred对任意一个元素满足,则返回true,否则返回false。如果序列为空则返回false。
none_of 返回一个bool值,unaryPred对所有元素都不满足,则返回true。如果序列为空也返回true,否则返回false。


1.2 查找重复值

函数名称 adjacent_find (beg, end) adjacent_find (beg, end, binaryPred) search_n (beg, end, count) search_n (beg, end, count, binaryPred)


adjacent_find 返回一个迭代器,指向序列中第一对相邻重复的元素,如果序列中没有相邻重复的元素,则返回end。
search_n 返回一个迭代器,从此位置开始,有count个相等元素。如果序列中不存在这样的子序列,则返回end。


1.3 查找子序列

函数名称 search (beg1, end1, beg2, end2) search (beg1, end1, beg2, end2, binaryPred) find_first_of (beg1, end1, beg2, end2) find_first_of (beg1, end1, beg2, end2, binaryPred) find_end (beg1, end1, beg2, end2) find_end (beg1, end1, beg2, end2, binaryPred)


search 返回一个迭代器,指向第二个子序列在第一个序列中第一次出现的位置,如果未找到匹配的子序列,则返回end1。
find_first_of 返回一个迭代器,指向第二个序列中任意元素在第一个序列中第一次出现的位置,如果未找到匹配的子序列,则返回end1。
find_end 返回一个迭代器,指向第二个子序列在第一个序列中最后一次出现的位置,如果未找到匹配的子序列,则返回end1。


2. 其他只读算法


函数名称 for_each (beg, end, unaryOp) mismatch (beg1, end1, beg2) mismatch (beg1, end1, beg2, binaryPred) equal (beg1, end1, beg2)) equal (beg1, end1, beg2, binaryPred)


for_each 对输入序列中的每个元素应用可调用对象unaryOp。
mismatch 比较两个序列中的元素,返回一个迭代器的pair,表示两个序列中第一个不匹配的元素。如果所有元素都匹配,则返回的pair中第一个迭代器为end1,第二个迭代器指向beg2中偏移量等于第一个序列长度的位置。
equal 返回一个bool值,如果两个序列完全相同则返回true。


如有不对的地方欢迎大家指正交流 ,持续更新中

原创粉丝点击