STL头文件提供高效通用算法,基于迭代器操作容器或数组。①查找类:find、find_if搜索元素,count、count_if统计,binary_search判断有序序列是否存在值。②排序与重排:sort排序,reverse反转,unique去重(需配合erase),rotate旋转。③数值操作:accumulate求和,iota填充递增值,partial_sum计算前缀和。④集合操作(需有序区间):merge合并,set_union并集,set_intersection交集,set_difference差集。⑤注意事项:迭代器范围合法,修改类算法不改变大小,自定义比较需严格弱序,目标空间需预先分配。熟练使用可提升代码效率与可读性。

C++ STL中的
查找类函数
这类函数用于在范围内搜索特定值或满足条件的元素。
• std::find(begin, end, value):返回第一个等于value的元素的迭代器,未找到则返回end。• std::find_if(begin, end, pred):返回第一个满足谓词pred的元素的迭代器。
• std::count(begin, end, value):统计等于value的元素个数。
• std::count_if(begin, end, pred):统计满足pred的元素个数。
• std::binary_search(begin, end, value):判断有序序列中是否包含value(需已排序)。
排序与重排类函数
用于对数据进行排序或按规则重新排列。
• std::sort(begin, end):对范围内的元素进行升序排序,默认使用• std::sort(begin, end, comp):使用自定义比较函数comp进行排序。
• std::reverse(begin, end):反转区间内元素顺序。
• std::unique(begin, end):移除相邻重复元素(实际是将去重后元素前移,返回新逻辑尾部)。
• std::rotate(begin, mid, end):以mid为轴心旋转,使[mid, end)部分移到前面。
数值操作类函数
定义在
立即学习“C++免费学习笔记(深入)”;
• std::accumulate(begin, end, init):计算从init开始的所有元素总和。• std::iota(begin, end, val):将val, val+1, val+2...依次赋给区间元素。
• std::partial_sum(begin, end, out):输出每个位置的前缀和到out指向的区域。
集合操作类函数
适用于两个**已排序**的区间,实现类似数学集合的操作。
• std::merge(a1, a2, b1, b2, out):合并两个有序区间到out开始的位置。• std::set_union(a1, a2, b1, b2, out):求并集。
• std::set_intersection(a1, a2, b1, b2, out):求交集。
• std::set_difference(a1, a2, b1, b2, out):求差集。
实用技巧与注意事项
使用STL算法时注意以下几点可避免常见错误。
• 所有算法都通过迭代器操作,不检查容器边界,确保传入合法范围。• 修改类算法(如unique、remove)不会改变容器大小,通常需配合erase使用(erase-remove惯用法)。
• 使用自定义比较函数时,若用于排序,应保证“严格弱序”关系。
• 算法不处理内存分配,目标区域需预先分配足够空间(如copy需确保目标有足够容量)。 基本上就这些。熟练运用











