STL 分类

1、不改变序列的操作:
all_of() // 序列上所有元素全部都是...
any_of() // 序列上所有元素存在一个是...
none_of() // 序列上所有元素没有一个是...

count(first, last, elem) // 对序列(指定元素)计数
find(first, last, elem)/find_if() // 查找序列中的一个元素 _if// 可自定义查找条件
search() // 查找序列中的一段子序列

adjacent_find(first, last) // 在序列中查找第一个挨在一起的两个值相同的指定元素

--------------------------------------------------------------------------------------------
2、改变序列的操作:
copy(first, last, out)/copy_if() // 复制
copy_bcakward()
copy_n()

move(first, last, out) / move_backward() // 取得整个序列的最右引用

fill(first, last, num) / fill_n() // 类似memset,填充序列元素

generate(first, last, fun) // 类似fill,使用一盒函数往序列中填充元素
generate_n()

remove(first, last, elem)/remoce_if() // 将要删除的元素移动到序列尾

replace()/replace_if()
replace_copy()/ replace_copy_if()

reverse()/ reverse_copy() // 反转序列

rotate()/rotate_copy() // 在序列中交换其中两部分的顺序

unique(first, last)/ unique_copy() // 删除序列中连续重复的元素(即把冗余的元素移动到序列尾)

swap()/ iter_swap()/swap_ranges(first, last, out) // 交换两个序列的内容

iota(first, last, num) // 在一段区间上填上递增的数字

transform(first, last, out, fun) //对序列中的每个元素都执行函数fun,(可以对序列本身没有影响,也可以改变序列本身)

for_each(first, last, fun) // 类似transform,它是在本序列上进行操作,灵活性小


shuffle() // 随机打乱序列中元素的顺序

sample() // 从序列中随机挑选n个元素出来组成新的序列,每个元素只会被选择一次,如果n大于序列的长度,那么整个序列都会被选出来。

---------------------------------------------------------------------------------------------
3、划分操作:
partition() //

stable_partition() // 划分的时候可以保持序列之前的相对顺序

is_partiontioned()

partition_copy()

partition_point()

---------------------------------------------------------------------------------------------
4、排序操作:
sort()

stable_sort()

partial_sort / partial_sort_copy() // 对序列前半部分进行排序

nth_element() // 这个算法保证第n个位置上的元素一定是有序的,然后以这个位置为界限,右边的每一个元素都大于左边的每一个元素。类似快排的思想

is_sorted()

is_sorted_until()

---------------------------------------------------------------------------------------------
4、二分操作:
lower_bound()
upper_bound()

binary_search()
equal_range()

---------------------------------------------------------------------------------------------
5、合并操作:
merge() // 有序区间的合并,而merge通常用来把不同有序序列合并,因此需要一个容器来放结果。
inplace_merge() // 两者的区别就在于inplace_merge可以在就地进行(一个序列,前半部分和后部分分别有序)而不用借助额外的空间,

---------------------------------------------------------------------------------------------
6、比较操作:
equal() // 判断两个序列是否完全相同

lexicographical_compare() // 判断两个序列字典序

mismatch() // 判断找出两个序列第一个不同的地方

---------------------------------------------------------------------------------------------
7、集合操作:
set_difference()

set_union()

set_intersection()

set_symmetric_differences()

includes()

merge()

---------------------------------------------------------------------------------------------
8、对操作:
make_heap() // 把一串序列调整成最大堆的数组形式

push_heap()

pop_heap()

sort_heap()

is_heap() / is_heap_until() // 判断序列是否为最大堆以及在序列中找到一个最大的最大堆(以序列头为堆顶)

---------------------------------------------------------------------------------------------
9、最大最小操作:
min_element / max_element / min_max_element // 返回序列中最小(最大)值的位置

min / max / minmax // 返回两者中较小(较大)的那个值

clamp() // 给定一个区间,一个元素,它返回这个区间最靠近这个元素的值。

10、排列操作:
next_permutation()

prev_permutation()

is_permutation()

---------------------------------------------------------------------------------------------
11、数值操作:
accumulate()

partial_sum() // 求前缀和,生成前缀和序列。

inner_product()

adjacent_difference()

reduce()

transform_reduce()

inclusive_scan()

exclusive_scan()

transform_inclusive_scan()

transform_exclusive_scan()

gcd() // 最大公约数

lcm() // 最小公倍数

---------------------------------------------------------------------------------------------
12、未初始化内存上的操作:


uninitialized_copy()

uninitialized_copy_n()

uninitialized_fill() / uninitialized_fill_n()

uninitialized_move() / uninitialized_move_n(这个及以下都是C++17的算法)

uninitialized_default_construct() / uninitialized_default_construct_n
()
uninitialized_value_construct / uninitialized_value_construct_n
destroy()
destroy_at / destroy_n

---------------------------------------------------------------------------------------------

 

posted @ 2018-10-22 11:00  j_shuang  阅读(369)  评论(0编辑  收藏  举报