STL算法目录

23 篇文章 0 订阅
13 篇文章 0 订阅

STL算法---查找算法

1. adjacent_find (相邻查找)
在范围[_First, _Last)查找第一对相邻相等的元素, 并返回这对元素的前面的iterator

2. binary_search (二分查找)
在有序序列中查找value,找到返回true。

3. count(统计)
4. count_if(统计)
在[_First, _Last)范围内的元素与输入值_Val比较, 返回相等元素个数

5. equal_range(也是使用二分查找的算法)
对已排序的[first, last)中寻找value的可插入位置, 它返回一对迭代器

6. find 和find_if元素查找
对范围[first, last)内的元素与输入值val进行比较. 当匹配时,结束搜索, 返回该元素的一个InputIterator

7. find_end(找到最后一组, 并返回)
在范围[first1, last1)内查找"[first2, last2)"的最后一次出现.找到则返回最后一对的第一个ForwardIterator,否则返回last1.

8. find_first_of(找到其中一个, 并返回)
在范围[first1, last1)内查找"[first2, last2)"中任意一个元素的第一次出现, 如果存在则返回. 重载版本中使用了用户自定义操作符

9. lower_bound和upper_bound(第一个大于等于;第一个大于)
lower_bound返回一个非递减序列[first, last)中第一个大于等于值val的位置。
upper_bound返回一个非递减序列[first, last)中第一个大于val的位置。

10. search
在[first1, last1)中, 查找成功指向第一个范围内第一次出现子序列(第二个范围)的位置,查找失败指向last1,

11. search_n(查找val出现n次的子序列)
在指定范围内查找val出现n次的子序列。

STL算法---堆算法

1. 实现堆栈
有4个函数(make_heap, push_heap, pop_heap, sort_heap)

STL算法---关系算法(大于/小于/相等/包含)

1. equal(判断两序列是否相等)
[first, last)与[x, x + last - first)每个对应位置的元素相等, 返回true.(默认使用等于操作符) 

2. includes(判断两序列是否存在包含关系)
判断[first1, last1)内的所有元素是否都包含[first2, last2), 使用底层元素的<操作符, 成功返回true.

3. lexicographical_compare(以字典排列方式进行比较, 例如字符串的大小比较)
以字典排列方式进行比较
例如: "a" < "b"; "ab" < "b;" "1" < "2"; "11" < "2"; "A" < "AB" (字符的比较)

4. max / max_element / min / min_element(返回最大/最小元素)
4.1 max 
返回两个元素中较大一个。
4.2 max_element 
返回一个ForwardIterator,指出序列中最大的元素。
4.3 min
返回两个元素中较小一个。
4.4 min_element
返回一个ForwardIterator,指出序列中最小的元素。

5. mismatch (并行比较两个序列)

STL算法---集合算法

1. set_union(并集)
2. set_intersection(交集)
3. set_difference(-交集)
4. set_symmetric_difference(并集-交集)

STL算法---排序算法

1. nth_element
将范围内的序列重新排序, 使所有小于等于第n个元素的元素都出现在它前面,而大于它的都出现在后面。

2. partial_sort / partial_sort_copy (部分排序)
2.1 partial_sort
对序列做部分排序, 被排序元素个数正好可以被放到范围内.
2.2 partial_sort_copy
与partial_sort类似,不过将经过排序的序列复制到另一个容器

3. partition / stable_partition(分类排序)
3.1 partition
3.2 stable_partition
与partition类似, 但了保留容器中的相对顺序

4. random_shuffle(随机调整次序)
5. reverse / reverse_copy(反序排序)
6. sort / stable_sort

7. rotate / rotate_copy
把[first, middle)的元素拷贝到last的后面; 或者说把[middle, last)的元素拷贝到first的前面.

8. inplace_merge / merge
8.1 inplace_merge
合并两个有序序列,结果序列覆盖两端范围。

8.2 merge
合并两个有序序列,存放到另一个序列。重载版本使用自定义的比较

STL算法---拷贝/删除/替换算法

1. copy / copy_backward(复制序列)
1.1 copy 复制序列
1.2 copy_backward 与copy相同,不过元素是从后面开始顺序拷贝填充

2. iter_swap
交换两个ForwardIterator的值, 就是两个值的交互.

3. remove / remove_copy / remove_if / remove_copy_if (删除操作)

3.1 remove
删除[first, last)内所有等于val的全部元素。例如在std::vector中元素被左移.

3.2 remove_copy
将所有不匹配元素复制到一个制定容器,返回OutputIterator指向被拷贝的末元素的下一个位置

3.3 remove_if
删除指定范围内输入操作结果为true的所有元素

3.4 remove_copy_if
将所有不匹配元素拷贝到一个指定容器

4. replace / replace_copy / replace_if / replace_copy_if (替换操作)
4.1 replace
将指定范围内所有等于vold的元素都用vnew代替

4.2 replace_copy
与replace类似,不过将结果写入另一个容器

4.3 replace_if
将指定范围内所有操作结果为true的元素用新值代替

4.4 replace_copy_if
与replace_if,不过将结果写入另一个容器

5. swap / swap_ranges 
5.1 swap 
交换存储在两个对象中的值

5.2 swap_ranges
将指定范围内的元素与另一个序列元素值进行交换

6. unique / unique_copy (清除序列中重复元素)
6.1 unique
清除序列中连续重复元素。例如: 11, 12, 12, 14 调用后变成 11, 12, 14. 

6.2 unique_copy
与unique类似,不过把结果输出到另一个容器

STL算法---生成和变异算法(遍历元素, 对元素做一些事情)

1. fill / fill_n
1.1 fill
将[first, last)中的元素赋值为x
1.2 fill_n
将输入值赋给first到first + n范围内的所有元素

2. for_each
用指定函数依次对指定范围内所有元素进行迭代访问,返回所指定的函数类型。该函数不得修改序列中的元素

3. generate / generate_n
3.1 generate
连续调用输入的函数来填充指定的范围

3.2 generate_n
与generate函数类似,填充从指定iterator开始的n个元素

4. transform
将输入的操作作用与指定范围内的每个元素,并产生一个新的序列。

STL算法---数学计算算法

1. accumulate
iterator对标识的序列段元素之和,加到一个由val指定的初始值上。重载版本不再做加法,而是传进来的二元操作符被应用到元素上

2. partial_sum
创建一个新序列,其中每个元素值代表指定范围内该位置前所有元素之和。重载版本使用自定义操作代替加法

3. product
对两个序列做内积(对应元素相乘,再求和)并将内积加到一个输入的初始值上。重载版本使用用户定义的操作

4. adjacent_difference
创建一个新序列,新序列中每个新值代表当前元素与上一个元素的差。重载版本用指定二元操作计算相邻元素的差

5. 排列组合算法
5.1 next_permutation
取出当前范围内的排列,并重新排序为下一个排列。重载版本使用自定义的比较操作

5.2 prev_permutation
取出指定范围内的序列并将它重新排序为上一个序列。如果不存在上一个序列则返回false。重载版本使用自定义的比较操作

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值