非变动性算法
一. 概述
非变动性算法
既不改变元素次序,也不改变元素值。
count() |
返回元素个数 |
count()_if() |
返回满足某一条件的元素个数 |
min_element() |
返回最小值 |
max_element() |
返回最大值 |
find() |
搜索等于某个值的第一个元素 |
find_if() |
搜索满足某个条件的第一个元素 |
search_n() |
搜索具有某特性的第一段n个连续元素 |
search() |
搜索某个子区间第一次出现位置 |
find_end() |
搜索某个子区间最后一次出现位置 |
find_first_of() |
搜索等于"某数个值之一"的第一元素 |
adjacent_find() |
搜索连续两个相等的元素 |
equal() |
判断两区间是否相等 |
mismatch() |
返回两个序列的各组对应元素中,第一对不相等元素 |
lexicographical_compare() |
判断某一序列在"字典顺序"下是否小于另一序列 |
二. 元素计数
//计算区间[beg, end)中元素值等于value的元素个数
difference _type
count (InputIterator beg, InputIterator end, const T& value)
//计算区间[beg, end)中令op(elem)元素判断结果为true的元素个数
difference _type
count_if (InputIterator beg, InputIterator end, UnaryPredicate op)
三. 最小值和最大值
//返回区间[beg, end)中最小值的位置,注意返回的是位置,你要通过 operator* 来得到值
InputIterator
min_element (InputIterator beg, InputIterator end)
//Op用来比较两个元素,op(elem1, elem2)
InputIterator
min_element (InputIterator beg, InputIterator end, CompFunc op)
//返回区间[beg, end)中最大值的位置
InputIterator
max_element (InputIterator beg, InputIterator end)
InputIterator
max_element (InputIterator beg, InputIterator end, CompFunc op)
四. 搜索元素
1. 搜索第一个元素
//返回区间[beg, end)中第一个元素值等于value的元素位置,如果没有找到,两种形式都返回end
InputIterator
find (InputIterator beg, InputIterator end, const T& value)
InputIterator
find_if (InputIterator beg, InputIterator end, UnaryPredicate op)
2. 搜索前n个连续匹配值
//返回区间[beg, end)中第一组连续count个元素值全等于value的元素位置
//注意如果没有找到匹配的元素或count个数不满足,都会返回end
InputIterator
search_n (InputIterator beg, InputIterator end,
Size count, const T& value)
//返回区间[beg, end)中第一组连续count个元素造成op(elem, value)为true的元素位置
InputIterator
search_n (InputIterator beg, InputIterator end,
Size count, const T& value, BinaryPredicate op)
3. 搜索第一个子区间
//返回区间[beg, end)内和区间[searchBeg, searchEnd)完全吻合的第一个子区间内的第一个元素位置
//如果没找到返回 end
ForwardIterator1
search (ForwardIterator1 beg, ForwardIterator1 end,
ForwardIterator2 searchBeg, ForwardIterator2 searchEnd)
//子区间的元素和 [searchBeg, searchEnd)内的元素满足op(elem, searchElem)为true
ForwardIterator1
search (ForwardIterator1 beg, ForwardIterator1 end,
ForwardIterator2 searchBeg, ForwardIterator2 searchEnd,
BinaryPredicate op)
4. 搜索最后一个子区间
//返回区间[beg, end)内和区间[searchBeg, searchEnd)完全吻合的最后一个子区间内的第一个元素位置
//如果没找到返回 end
ForwardIterator
find_end (ForwardIterator beg, ForwardIterator end,
ForwardIterator searchBeg, ForwardIterator searchEnd)
//子区间的元素和 [searchBeg, searchEnd)内的元素满足op(elem, searchElem)为true
ForwardIterator
find_end (ForwardIterator beg, ForwardIterator end,
ForwardIterator searchBeg, ForwardIterator searchEnd,
BinaryPredicate op)
5. 搜索某些元素的第一次出现地点
//返回第一个既在区间[beg, end)出现,也在区间[searchBeg, searchEnd)中出现的元素位置
//如果没找到返回 end
ForwardIterator
find_first_of (ForwardIterator1 beg, ForwardIterator1 end,
ForwardIterator2 searchBeg, ForwardIterator2 searchEnd)
//返回第一个在区间[beg, end)和区间[searchBeg, searchEnd)
//中每个元素在op(elem, searchElem)为true的位置
ForwardIterator
find_first_of (ForwardIterator1 beg, ForwardIterator1 end,
ForwardIterator2 searchBeg, ForwardIterator2 searchEnd,
BinaryPredicate op)
6. 搜索两个连续且相等的元素
//返回区间[beg, end)中第一对"连续两个相等元素"中的第一元素的位置
InputIterator
adjacent_find (InputIterator beg, InputIterator end)
//返回区间[beg, end)中第一对"连续的两个元素使op(elem, nextElem)为true"的第一元素的位置
InputIteratoradjacent_find_if (InputIterator beg, InputIterator end,
BinaryPredicate op)
五. 区间比较
1. 检验相等性
//判断区间[beg, end)内的元素是否都和以cmpBeg开头的区间内的元素相等
bool
equal (InputIterator1 beg, InputIterator1 end,
InputIterator2 cmpBeg)
//判断区间[beg, end)内的元素和以cmpBeg开头的区间内对应的元素,
//是否都能够使op(elem, cmpElem)为true
bool
equal (InputIterator1 beg, InputIterator1 end,
InputIterator2 cmpBeg, BinaryPredicate op)
2. 搜索第一处不同点
//返回区间[beg, end)和以cmpBeg开头的区间中第一组两两相异的对应元素
pair<InputIterator1,InputIterator2>
mismatch (InputIterator1 beg, InputIterator1 end,
InputIterator2 cmpBeg)
//返回区间[beg, end)和以cmpBeg开头的区间中第一组使op(elem,cmpElem)为false的元素
pair<InputIterator1,InputIterator2>
mismatch (InputIterator1 beg, InputIterator1 end,
InputIterator2 cmpBeg, BinaryPredicate op)
3. 检验"小于"
//判断区间[beg1,end1)的元素是否小于区间[beg2,end2)的元素
bool
lexicographical_compare (InputIterator1 beg1, Input Iterator1 end1,
InputIterator2 beg2, InputIterator2 end2)
//以op(elem1, elem2)比较元素。如果elem1 小于 elem2则返回true
bool
lexicographical_compare (InputIterator1 begl, InputIterator1 end1,
InputIterator2 beg2, InputIterator2 end2,
CompFunc op)