STL常用算法说明

本文介绍了C++ STL库中的常见算法,包括非质变算法如for_each、find、find_if等,质变算法如transform、swap、replace等,以及排序和查找算法如sort、binary_search、merge等,掌握这些算法能有效提升编程效率。

        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
    稳定分割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值