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()判断某一序列在"字典顺序"下是否小于另一序列
二. 元素计数
  1. //计算区间[beg, end)中元素值等于value的元素个数 
  2. difference _type 
  3. count (InputIterator beg, InputIterator end, const T& value) 
  4.  
  5. //计算区间[beg, end)中令op(elem)元素判断结果为true的元素个数 
  6. difference _type 
  7. count_if (InputIterator beg, InputIterator end, UnaryPredicate op) 
//计算区间[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)
三. 最小值和最大值
  1. //返回区间[beg, end)中最小值的位置,注意返回的是位置,你要通过 operator* 来得到值 
  2. InputIterator 
  3. min_element (InputIterator beg, InputIterator end) 
  4.  
  5. //Op用来比较两个元素,op(elem1, elem2) 
  6. InputIterator 
  7. min_element (InputIterator beg, InputIterator end, CompFunc op) 
  8.  
  9. //返回区间[beg, end)中最大值的位置 
  10. InputIterator 
  11. max_element (InputIterator beg, InputIterator end) 
  12.  
  13. InputIterator 
  14. max_element (InputIterator beg, InputIterator end, CompFunc 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. 搜索第一个元素

  1. //返回区间[beg, end)中第一个元素值等于value的元素位置,如果没有找到,两种形式都返回end 
  2. InputIterator 
  3. find (InputIterator beg, InputIterator end, const T& value) 
  4.  
  5. InputIterator 
  6. find_if (InputIterator beg, InputIterator end, UnaryPredicate op) 
//返回区间[beg, end)中第一个元素值等于value的元素位置,如果没有找到,两种形式都返回end
InputIterator
find (InputIterator beg, InputIterator end, const T& value)

InputIterator
find_if (InputIterator beg, InputIterator end, UnaryPredicate op)
2. 搜索前n个连续匹配值
  1. //返回区间[beg, end)中第一组连续count个元素值全等于value的元素位置 
  2. //注意如果没有找到匹配的元素或count个数不满足,都会返回end 
  3. InputIterator 
  4. search_n (InputIterator beg, InputIterator end,  
  5.           Size count, const T& value) 
  6.  
  7. //返回区间[beg, end)中第一组连续count个元素造成op(elem, value)为true的元素位置 
  8. InputIterator 
  9. search_n (InputIterator beg, InputIterator end,  
  10.           Size count, const T& value, BinaryPredicate op) 
//返回区间[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. 搜索第一个子区间
  1. //返回区间[beg, end)内和区间[searchBeg, searchEnd)完全吻合的第一个子区间内的第一个元素位置 
  2. //如果没找到返回 end 
  3. ForwardIterator1 
  4. search (ForwardIterator1 beg, ForwardIterator1 end,  
  5.         ForwardIterator2 searchBeg, ForwardIterator2 searchEnd) 
  6.  
  7. //子区间的元素和 [searchBeg, searchEnd)内的元素满足op(elem, searchElem)为true 
  8. ForwardIterator1 
  9. search (ForwardIterator1 beg, ForwardIterator1 end,  
  10.         ForwardIterator2 searchBeg, ForwardIterator2 searchEnd,  
  11.         BinaryPredicate op) 
//返回区间[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. 搜索最后一个子区间
  1. //返回区间[beg, end)内和区间[searchBeg, searchEnd)完全吻合的最后一个子区间内的第一个元素位置 
  2. //如果没找到返回 end 
  3. ForwardIterator 
  4. find_end (ForwardIterator beg, ForwardIterator end,  
  5.           ForwardIterator searchBeg, ForwardIterator searchEnd) 
  6.  
  7. //子区间的元素和 [searchBeg, searchEnd)内的元素满足op(elem, searchElem)为true 
  8. ForwardIterator 
  9. find_end (ForwardIterator beg, ForwardIterator end,  
  10.           ForwardIterator searchBeg, ForwardIterator searchEnd,  
  11.           BinaryPredicate op) 
//返回区间[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. 搜索某些元素的第一次出现地点
  1. //返回第一个既在区间[beg, end)出现,也在区间[searchBeg, searchEnd)中出现的元素位置 
  2. //如果没找到返回 end 
  3. ForwardIterator 
  4. find_first_of (ForwardIterator1 beg, ForwardIterator1 end,  
  5.                ForwardIterator2 searchBeg, ForwardIterator2 searchEnd) 
  6.  
  7. //返回第一个在区间[beg, end)和区间[searchBeg, searchEnd) 
  8. //中每个元素在op(elem, searchElem)为true的位置 
  9. ForwardIterator 
  10. find_first_of (ForwardIterator1 beg, ForwardIterator1 end,  
  11.                ForwardIterator2 searchBeg, ForwardIterator2 searchEnd,  
  12.                BinaryPredicate op) 
//返回第一个既在区间[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. 搜索两个连续且相等的元素
  1. //返回区间[beg, end)中第一对"连续两个相等元素"中的第一元素的位置 
  2. InputIterator 
  3. adjacent_find (InputIterator beg, InputIterator end) 
  4.  
  5. //返回区间[beg, end)中第一对"连续的两个元素使op(elem, nextElem)为true"的第一元素的位置 
  6. InputIteratoradjacent_find_if (InputIterator beg, InputIterator end,  
  7.                                BinaryPredicate op) 
//返回区间[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. 检验相等性

  1. //判断区间[beg, end)内的元素是否都和以cmpBeg开头的区间内的元素相等 
  2. bool 
  3. equal (InputIterator1 beg, InputIterator1 end,  
  4.        InputIterator2 cmpBeg) 
  5.  
  6. //判断区间[beg, end)内的元素和以cmpBeg开头的区间内对应的元素, 
  7. //是否都能够使op(elem, cmpElem)为true 
  8. bool 
  9. equal (InputIterator1 beg, InputIterator1 end,  
  10.        InputIterator2 cmpBeg, BinaryPredicate op) 
//判断区间[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. 搜索第一处不同点
  1. //返回区间[beg, end)和以cmpBeg开头的区间中第一组两两相异的对应元素 
  2. pair<InputIterator1,InputIterator2> 
  3. mismatch (InputIterator1 beg, InputIterator1 end,  
  4.           InputIterator2 cmpBeg) 
  5.  
  6. //返回区间[beg, end)和以cmpBeg开头的区间中第一组使op(elem,cmpElem)为false的元素 
  7. pair<InputIterator1,InputIterator2> 
  8. mismatch (InputIterator1 beg, InputIterator1 end,  
  9.           InputIterator2 cmpBeg, BinaryPredicate op) 
//返回区间[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. 检验"小于"
  1. //判断区间[beg1,end1)的元素是否小于区间[beg2,end2)的元素 
  2. bool 
  3. lexicographical_compare (InputIterator1 beg1, Input Iterator1 end1,  
  4.                          InputIterator2 beg2, InputIterator2 end2) 
  5.  
  6. //以op(elem1, elem2)比较元素。如果elem1 小于 elem2则返回true 
  7. bool 
  8. lexicographical_compare (InputIterator1 begl, InputIterator1 end1,  
  9.                          InputIterator2 beg2, InputIterator2 end2,  
  10.                          CompFunc op) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值