C++ STL方法整理

0.通用描述

beg和end:表示元素范围的迭代器。几乎所有算法都带有由二者组成的序列。

beg2和end2:表示第二个输入序列开始和结束位置的迭代器,部分算法只有beg2。由用户保证beg2开始的范围至少和beg和end所表示的范围一样长(即不会越界)。beg和beg2类型无需匹配,但需要保证都能执行特定操作或调用给定的可调用对象。 

dest:表示目的序列的迭代器。由用户保证以dest开始的范围有足够的长度(即不会越界)。

unaryPred和bianryPred:分别是一元和二元谓词,分别接受一个和两个参数,都是来自输入序列的元素,两个谓词都返回可用作条件的类型(如bool)。

comp:是一个二元谓词,满足关联容器中对关键字序的要求。

unaryOp和binaryOp:是可调用对象,可分别使用来自输入序列的一个和两个实参来调用。

1.查找对象的算法

    在一个输入序列中搜索指定值或一个值的序列。

    不带谓词的版本使用底层类型的相等运算符(==)来比较元素;带谓词的版本使用用户给定的一元或二元谓词来比较元素。

简单查找

find(beg, end, val)

find_if(beg, end, unaryPred)

find_if_not(beg, end, unaryPred)

count(beg, end, val)

count_if(beg, end, val)

all_of(beg, end, unaryPred)

any_of(beg, end, unaryPred)

none_of(beg, end, unaryPred)

查找重复值

adjacent_find(beg, end)

adjacent_find(beg, end, bianryPred)

search(beg, end, count, val)

search_n(beg, end, count, val, bianryPred)

查找子序列

search(beg1, end1, beg2, end2)

search(beg1, end1, beg2, end2, bianryPred)

find_first_of(beg1, end1, beg2, end2)

find_first_of(beg1, end1, beg2, end2, bianryPred)

find_end(beg1, end1, beg2, end2)

find_end(beg1, end1, beg2, end2, bianryPred)

2.其他只读算法

    不带谓词的版本使用底层类型的相等运算符(==)来比较元素;带谓词的版本使用用户给定的一元或二元谓词来比较元素。

for_each(beg, end, unaryOp)

mismatch(beg1, end1, beg2)

mismatch(beg1, end1, beg2, bianryPred)

equal(beg1, end1, beg2)

equal(beg1, end1, beg2, bianryPred)

3.二分搜索算法

    假如提供随机访问迭代器,性能会好很多。

    不带谓词的版本使用元素类型的小于运算符(<)来比较元素;带谓词的版本使用用户给定的比较操作。

lower_bound(beg, end, val)

lower_bound(beg, end, val, comp)

upper_bound(beg, end, val)

upper_bound(beg, end, val, comp)

equal_range(beg, end, val)

equal_range(beg, end, val, comp)

binary_search(beg, end, val)

binary_search(beg, end, val, comp)

4.写容器元素的算法

    可调用对象Gen()用于生成新值。

只写不读元素

fill(beg, end, val)

fill_n(dest, cnt, val)

generate(beg, end, Gen)

generate(dest, cnt, Gen)

使用输入迭代器

copy(beg, end, dest)

copy_if(beg, end, dest, unaryPred)

copy_n(beg, n, dest)

move(beg, end, dest)

transform(beg, end, dest, unaryOp)

transform(beg, end, beg2, dest, binaryOp)

replace_copy(beg, end, dest, old_val, new_val)

replace_copy_if(beg, end, dest, unaryPred, new_val)

merge(beg1, end1, beg2, end2, dest)

merge(beg1, end1, beg2, end2, dest, comp)

使用前向迭代器

iter_swap(iter1, iter2)

swap_ranges(beg1, end1, beg2)

replace(beg, end, old_val, new_val)

replace_if(beg, end, unaryPred, new_val)

使用双向迭代器

copy_backward(beg, end, dest)

move_backward(beg, end, dest)

inplace_merge(beg, mid, end)

inplace_merge(beg, mid, end, comp)

5.划分与排序算法

    稳定版本保证保持相等元素的相对顺序,可能比不稳定版本慢得多并消耗更多内存。

划分

is_partitioned(beg, end, unaryPred)

partition_copy(beg, end, dest1, dest2, unaryPred)

partition_point(beg, end, unaryPred)

stable_partition(beg, end, unaryPred)

partition(beg, end, unaryPred)

排序

sort(beg, end)

stable_sort(beg, end)

sort(beg, end, comp)

stable_sort(beg, end, comp)

is_sorted(beg, end)

is_sorted(beg, end, comp)

is_sorted_until(beg, end)

is_sorted_until(beg, end, comp)

partition_sort(beg, mid, end)

partition_sort(beg, mid, end, comp)

partition_sort_copy(beg, end, destBeg, destEnd)

partition_sort_copy(beg, end, destBeg, destEnd, comp)

nth_element(beg, nth, end)

nth_element(beg, nth, end, comp)

6.通用重排操作

    稳定版本保证保持相等元素的相对顺序,可能比不稳定版本慢得多并消耗更多内存。

    Uniform_rand需要满足均匀分布随机数生成器的要求。

使用前向迭代器

remove(beg, end, val)

remove_if(beg, end, unaryPred)

remove_copy(beg, end, dest, val)

remove_copy_if(beg, end, dest, unaryPred)

unique(beg, end)

unique(beg, end, binaryPred)

unique_copy(beg, end, dest)

unique_copy_if(beg, end, dest, binaryPred)

rotate(beg, mid, end)

rotate_copy(beg, mid, end, dest)

使用双向迭代器

reverse(beg, end)

reverse_copy(beg, end, dest)

使用随机访问迭代器

random_shuffle(beg, end)

random_shuffle(beg, end, rand)

shuffle(beg, end, Uniform_rand)

7.排列算法

    生成序列的字典序排列。算法假定序列中的元素都是唯一的。算法要求双向迭代器。

is_permutation(beg1, end1, beg2)

is_permutation(beg1, end1, beg2, binaryPred)

next_permutation(beg, end)

next_permutation(beg, end, comp)

prev_permutation(beg, end)

prev_permutation(beg, end, comp)

8.有序序列的集合算法

    实现了有序序列上的一般集合操作,与标准库set不同(不要混淆)。算法提供了普通顺序容器的类集合行为。

    每种算法都有重载版本,第一个使用元素类型的<运算符,第二个使用给定的比较操作。

includes(beg, end, beg2, end2)

includes(beg, end, beg2, end2, comp)

set_union(beg, end, beg2, end2, dest)

set_union(beg, end, beg2, end2, dest, comp)

set_difference(beg, end, beg2, end2, dest)

set_difference(beg, end, beg2, end2, dest, comp)

set_symmetric_difference(beg, end, beg2, end2, dest)

set_symmetric_difference(beg, end, beg2, end2, dest, comp)

9.最小值和最大值

    使用元素类型的<运算符或给定的比较操作。第一组算法对值而非序列进行操作。第二组算法接收一个序列,他们要求输入迭代器。

min(val1,val2)

min(val1,val2, comp)

min(init_list)

min(init_list, comp)

max(val1,val2)

max(val1,val2, comp)

max(init_list)

max(init_list, comp)

min_max(val1,val2)

min_max(val1,val2, comp)

min_max(init_list)

min_max(init_list, comp)

min_element(beg, end)

min_element(beg, end, comp)

max_element(beg, end)

max_element(beg, end, comp)

minmax_element(beg, end)

minmax_element(beg, end, comp)

lexicographical_compare(beg1, end1, beg2, end2)

lexicographical_compare(beg1, end1, beg2, end2, comp)

10.数值算法

    要求输入迭代器;如果算法输出数据,则使用输出迭代器表示目的位置。

accumulate(beg, end, init)

accumulate(beg, end, init, binaryOp)

inner_product(beg1, end1, beg2, init)

inner_product(beg1, end1, beg2, init, binOp1, binOp2)

partial_sum(beg, end, dest)

partial_sum(beg, end, dest, binaryOp)

adjacent_difference(beg, end, dest)

adjacent_difference(beg, end, dest, binaryOp)

iota(beg, end, val)

参考资料:

    C++ Primer 中文版(第五版)

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值