C++ STL库实现了很多常用的算法,基本都在<algorithm>头文件下,掌握它们对提高开发效率很有用。主要分为三种:不会修改数据的非质变算法(Non-mutating Algorithms),会修改数据的质变算法(Mutating Algorithms),以及排序和查找算法(Sorting and Searching Algorithms)。下面就简单介绍一下主要的一些算法函数。
1.非质变算法
-
for_each
为指定序列区间应用函数fn
template <class InputIterator, class Function>
Function for_each (InputIterator first, InputIterator last, Function fn);
-
find
查找等于指定值的第一个元素位置
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
-
find_if
查找满足条件的第一个元素位置
template <class InputIterator, class UnaryPredicate>
InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
-
find_first_of
在一个序列中查找等于第二个序列中任何一个元素的第一个元素的位置
template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); t
-
find_end
在序列1所涵盖的区间中查找序列2最后一次的出现点,如果不存在则返回
template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);;
-
count
返回与value相等的元素个数
template <class InputIterator, class T>
count (InputIterator first, InputIterator last, const T& val);
-
count_if
返回满足指定操作的元素的个数 -
search
在序列1所涵盖的区间中查找序列2的首次出现点,如果不存在则返回
template <class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
-
search_n
找出n个符合条件的元素形成的子序列
2 质变算法
-
transform
transform() 可以将函数应用到序列的元素上,并将这个函数返回的值保存到另一个序列中,它返回的迭代器指向输出序列所保存的最后一个元素的下一个位置。
template <class InputIterator, class OutputIterator, class UnaryOperation>
OutputIterator transform (InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperation op);
-
copy
-
copy_backward
-
swap
-
swap_ranges
互相交换元素 -
replace
用new_value代替old_value -
replace_if
替换满足条件的元素
-
fill
填充序列
-
fill_n
填充序列的前n个元素
-
remove
移除与value相等的元素,并不是真正删除 -
remove_if
移除被仿函数核定为true的元素,并不是真正删除 -
remove_copy
移除与value相等的元素,并不是真正删除,结果拷贝到另一处空间 -
remove_copy_if
移除被仿函数核定为true的元素,并不是真正删除,结果拷贝到另一处空间 -
unique
移除重复的元素,必须先排序 -
reverse
颠倒排序 -
rotate
把[first, middle) 和[middle, last) 的元素互换 -
random_shuffle
随机重排
3 排序和查找算法
-
sort
不稳定排序 -
stable_sort
稳定排序 -
partial_sort
分区排序
-
partial_sort_copy
分区排序并拷贝
-
nth_element
使第n小(大)元素排在合适位置
-
lower_bound
二分查找的下界 (从小到大序列中二分查找第一个大于等于目标数的位置)
upper_bound二分查找的上届 (从小到大序列中二分查找第一个大于目标数的位置)
-
equal_bound
二分查找的区间 [下界,上届)
-
binary_search
二分查找template <class ForwardIterator, class T>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val);
-
merge
将两个有序集合s1和s2合并起来置于另一段空间,结果是有序序列 -
partition
不稳定分割 -
stable_partition
稳定分割
本文介绍了C++ STL库中的常见算法,包括非质变算法如for_each、find、find_if等,质变算法如transform、swap、replace等,以及排序和查找算法如sort、binary_search、merge等,掌握这些算法能有效提升编程效率。

6334

被折叠的 条评论
为什么被折叠?



