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

本文详细介绍了非变动性算法的基本概念及其应用场景,包括元素计数、寻找最小和最大值、搜索元素、区间比较等核心操作,并提供了具体实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值