STL学习笔记----10.STL算法之 (非变动性算法)

非变动性算法
一. 概述
非变动性算法 既不改变元素次序,也不改变元素值
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)

你可能感兴趣的:(算法,search,iterator,input)