C++ algorithm函数简介(详细)

algorithm意为"演算法",是C++的标准模版库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数,库中的算法主要分为4类:

  • 非修改性顺序操作(Non-modifying sequence operations)
  • 可变顺序操作(Mutating sequence operations)
  • 排序和关系操作(Sorting and related operations)
  • C库算法(C library algorithms)
     

1.非修改性顺序操作(12个)

  1. 循环:对序列中的每个元素执行某操作 for_each() 

  2. 查找:在序列中找出某个值的第一次出现的位置 find() 利用底层元素的等于操作符,对范围内的元素与输入的值进行比较。当匹配时,结束搜索,返回该元素的一个 InputIterator 。

  3. 在序列中找出符合某谓词的第一个元素 find_if()

  4. 在序列中找出一子序列的最后一次出现的位置 find_end()

  5. 在序列中找出第一次出现指定值集中之值的位置 find_first_of()

  6. 在序列中找出相邻的一对值 adjacent_find() 

  7. 计数:在序列中统计某个值出现的次数 count()

  8. 在序列中统计与某谓词匹配的次数 count_if()

  9. 比较:找出两个序列相异的第一个元素 mismatch()

  10. 两个序列中的对应元素都相同时为真 equal() 

  11. 搜索:在序列中找出一子序列的第一次出现的位置 search()

  12. 在序列中找出一值的连续n次出现的位置 search_n()

2.可变顺序操作(27个)

  1. 复制:从序列的第一个元素起进行复制 copy()

  2. 从序列的最后一个元素起进行复制 copy_backward() 

  3. 交换:交换两个元素 swap()

  4. 交换指定范围的元素 swap_ranges()

  5. 交换由迭代器所指的两个元素 iter_swap() 

  6. 变换:将某操作应用于指定范围的每个元素 transform() 

  7. 替换:用一个给定值替换一些值 replace()

  8. 替换满足谓词的一些元素 replace_if()

  9. 复制序列时用一给定值替换元素 replace_copy()

  10. 复制序列时替换满足谓词的元素 replace_copy_if() 

  11. 填充:用一给定值取代所有元素 fill()

  12. 用一给定值取代前n个元素 fill_n()

  13. 生成:用一操作的结果取代所有元素 generate()

  14. 用一操作的结果取代前n个元素 generate_n() 

  15. 删除:删除具有给定值的元素 remove()

  16. 删除满足谓词的元素 remove_if()

  17. 复制序列时删除具有给定值的元素remove_copy()

  18. 复制序列时删除满足谓词的元素 remove_copy_if() 

  19. 唯一:删除相邻的重复元素 unique()

  20. 复制序列时删除相邻的重复元素 unique_copy() 

  21. 反转:反转元素的次序 reverse()

  22. 复制序列时反转元素的次序 reverse_copy() 

  23. 环移;循环移动元素 rotate()

  24. 复制序列时循环移动元素 rotate_copy() 

  25. 随机:采用均匀分布来随机移动元素 random_shuffle()

  26. 划分:将满足某谓词的元素都放到前面 partition()

  27. 将满足某谓词的元素都放到前面并维持原顺序stable_partition()

3.排序和关系操作(27个)

  1. 排序:以很好的平均效率排序 sort()

  2. 排序,并维持相同元素的原有顺序 stable_sort()

  3. 将序列的前一部分排好序partial_sort()

  4. 复制的同时将序列的前一部分排好序 partial_sort_copy() 

  5. 第n个元素 将第n各元素放到它的正确位置 nth_element() 

  6. 二分检索 找到大于等于某值的第一次出现 lower_bound()

  7. 找到大于某值的第一次出现 upper_bound()

  8. 找到(在不破坏顺序的前提下)可插入给定值的最大范围 equal_range()

  9. 在有序序列中确定给定元素是否存在 binary_search() 

  10. 归并:归并两个有序序列 merge()

  11. 归并两个接续的有序序列 inplace_merge() 

  12. 有序结构上的集合操作 一序列为另一序列的子序列时为真 includes()

  13. 构造两个集合的有序并集 set_union()

  14. 构造两个集合的有序交集 set_intersection()

  15. 构造两个集合的有序差集 set_difference()

  16. 构造两个集合的有序对称差集(并-交) set_symmetric_difference() 

  17. 堆操作:向堆中加入元素 push_heap()

  18. 从堆中弹出元素 pop_heap()

  19. 从序列构造堆 make_heap()

  20. 给堆排序 sort_heap() 

  21. 最大和最小 两个值中较小的 min()

  22. 两个值中较大的 max()

  23. 序列中的最小元素 min_element()

  24. 序列中的最大元素 max_element() 

  25. 词典比较 两个序列按字典序的第一个在前 lexicographical_compare() 

  26. 排列生成器 按字典序的下一个排列 next_permutation()

  27. 按字典序的前一个排列 prev_permutation()

4.C库算法

   该头文件还包含了标准C头文件stdlib.h,大体相同。 只是出于与C兼容的目的,bsearch 和 qsort同时包含了C和C++的两个函数签名.

 

本文参考这里

  • 13
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++标准库中提供了许多常用的算法函数,这些函数可以用于对容器(如vector、list等)中的数据进行排序、查找、遍历等操作。以下是一些常用的C++ algorithm函数: 1. `std::sort`:对容器中的元素进行排序,可以通过自定义比较函数来指定排序方式。 ```cpp std::vector<int> nums = {4, 2, 6, 1, 5}; std::sort(nums.begin(), nums.end()); // 默认升序排序 ``` 2. `std::binary_search`:在已排序的容器中进行二分查找,返回是否找到指定元素。 ```cpp std::vector<int> nums = {1, 2, 3, 4, 5}; bool found = std::binary_search(nums.begin(), nums.end(), 3); // true ``` 3. `std::find`:在容器中查找指定元素,返回第一个匹配元素的迭代器,如果没找到则返回容器末尾的迭代器。 ```cpp std::vector<int> nums = {1, 2, 3, 4, 5}; auto it = std::find(nums.begin(), nums.end(), 3); // 指向元素3的迭代器 ``` 4. `std::count`:统计容器中指定元素的个数。 ```cpp std::vector<int> nums = {1, 2, 2, 3, 2}; int count = std::count(nums.begin(), nums.end(), 2); // 3 ``` 5. `std::accumulate`:计算容器中元素的累加和,可以指定初始值。 ```cpp std::vector<int> nums = {1, 2, 3, 4, 5}; int sum = std::accumulate(nums.begin(), nums.end(), 0); // 15 ``` 6. `std::reverse`:将容器中的元素翻转。 ```cpp std::vector<int> nums = {1, 2, 3, 4, 5}; std::reverse(nums.begin(), nums.end()); // {5, 4, 3, 2, 1} ``` 这些函数只是C++ algorithm库中的一小部分,还有许多其他有用的函数可用于不同的操作。你可以查阅C++标准库文档以获取更详细的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值