STL学习笔记(一)不改变操作对象内容的算法

本文介绍C++标准库中的查找与比较算法,包括线性查找、子序列匹配、计算元素个数、遍历操作及范围比较等功能,并解释了如何使用自定义函数对象来扩展这些算法的能力。

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

线性查找

find(InputIterator first, InputIterator last, const T EqualityComparable& value);

找到range中与value值相等的第一个值的iterator

find_if(InputIterator first, InputIterator last, Predicate pred);

找到range中满足pred的第一个值的iterator,pred为单参数的函数对象

adjacent_find(ForwardIterator start, ForwardIterator last);

adjacent_find(ForwardIterator start, ForwardIterator last, BinaryPredicate bindary_pred);

第一个版本为找到连续的两个相等的值,返回第一个值的iterator

第二个版本为找到连续的两个值,要求其满足bindary_pred,其中bindary_pred是两个参数的函数对象

find_first_of(InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2);

find_first_of(InputIterator first1, InputIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate bindary_pred);

第一个版本找到在range1中的第一个iterator,它与range2中的某一个元素相等

第二个版本找到在range1中的第一个iterator,它与range2中的某一个元素满足bindary_pred,其中bindary_pred是两个参数的函数对象


子序列匹配

search(ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2);

search(ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate bindary_pred);

从range1中找出第一个与range2相同的子序列,相同则返回指向range1中子序列开头的iterator,返回子序列的开头,否则返回last1

第二个版本加了一个函数对象

例如:

    int* p = search(array, array + 10, array2, array2 + 5);
    if(p != array + 10)
        ......;

find_end(ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2);

find_end(ForwardIterator first1, ForwardIterator last1, ForwardIterator first2, ForwardIterator last2, BinaryPredicate bindary_pred);

找出最后一个子序列,其余与search相同

search_n(ForwardIterator first, ForwardIterator last,  Integer count, const T& value);

search_n(ForwardIterator first, ForwardIterator last,  Integer count, const T& value, BinaryPredicte bindary_pred);

从range中找出这样一个子序列,由count个值为value的元素组成,返回指向子序列的开头的iterator。注意如果count为0,则会返回first

第二个版本增加了自定义函数对象


计算元素个数

count(InputIterator first, InputIterator last, const EqualityComparable& value, Size& n);

计算出range中与value值相同的元素个数,存放在n中

经测试vc与gcc中只有这个版本

count_if(InputIterator first, InputIterator last, predicte pred, Size& n);

计算出range中满足pred的元素个数,存放在n中


for_each

for_each(InputIterator first, InputIterator last, UnaryFunction f);

对range中的所有元素执行动作f,通常忽略f的返回值(如果有的话)


比较两个range

equal(InputIterator first1, InputIterator last1, InputIterator first2)

将(first1, last1)与(first2, first2 + (last1 - first1))进行比较,如果元素一一对应相同,则返回true,否则返回false

equal(InputIterator first1, InputIterator last1, InputIterator first2, BinaryPredicte bindary_pred)

自定义函数对象的版本


mismatch(InputIterator first1, InputIterator last1, InputIterator first2)

将(first1, last1)与(first2, first2 + (last1 - first1))进行比较,返回值为一个pair<InputInterator, InputIterator>

记录指向两个range第一个不同元素的interator,否则返回两个range的last

mismatch(InputIterator first1, InputIterator last1, InputIterator first2, BinaryPredicte bindary_pred)

自定义函数对象的版本


lexicographical_compare(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2);

按字典排序法比较

lexicographical_compare(InputIterator first1, InputIterator last1, InputIterator first2, InputIterator last2, BinaryPredicate comp);

自定义函数对象的版本


最大值与最小值

min(const LessThanComparable& a, const LessThanComparable& b)

min(const LessThanComparable& a, const LessThanComparable& b, BinaryPredicate comp)

max(const LessThanComparable& a, const LessThanComparable& b)

max(const LessThanComparable& a, const LessThanComparable& b, BinaryPredicate comp)

min_element(ForwardIterator first, ForwardIterator last)

min_element(ForwardIterator first, ForwardIterator last, BinaryPredicate comp)

找出range中的最小元素,返回一个iterator

max_element(ForwardIterator first, ForwardIterator last)

max_element(ForwardIterator first, ForwardIterator last, BinaryPredicate comp)

找出range中的最大元素,返回一个iterator



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值