STL中的容器和算法简述

STL的特点:数据结构与算法分离,使其变得非常通用。

顺序容器:vector(向量)、list(双向链表)、deque(双端队列)。

关联容器:set(集合)、multiset(多重集合)、map(映射)、multimap(多重映射)。

容器适配器:stack(栈)、queue(队列)、qriority_queue(带权队列)。

算法头文件:<algorithm>,<numeric>,<functional>。

1、查找算法(13个):在容器中查找某个值。

adjacent_find

    在容器中查找两个相邻的元素,如果相等就返回这两个相等元素中第一个元素的迭代器,不等的话就返回v.end()。

binary_search

    在有序数组中进行二分查找某个元素,返回一个布尔值。

count

    用于计算某个元素出现的次数。

count_if

    用于计算数组中满足谓词条件的元素个数。

equal_range

    在有序容器中查找与某值相等的范围,返回一对iterator,第一个为lower_bound,第二个为upper_bound。

find

    在规定区间内查找某个元素,若找到则返回第一次出现的位置,若找不到返回end,返回的是迭代器。

find_end

    用于查找第一个区间内最后一个出现在第二个区间的元素,返回该元素的位置。

find_first_of

    用于查找第一个区间内第一个在第二个区间出现的元素,返回该元素的位置。

find_if

    返回在规定区间内满足谓词条件的第一个元素的位置。

lower_bound

    查找第一个大于或等于某个元素,返回查到元素的位置。

upper_bound

    查找第一个大于某个元素,返回位置。

search

    与find_first_of功能相同。

search_n

    用于查找某元素是否出现n次以上,若满足返回其第一次出现位置,若不满足返回end。

2、排序算法(14个):对容器元素进行排序

inplace_merge

    用于对同一序列中的两个连续有序进行排序。

merge

    将两个有序且顺序相同的容器进行合并按原来的顺序方向放入第三个容器。

nth_element

    用于在容器中指定一个位置,在该位置之前的元素都大于该元素,之后的元素都小于该元素,但不必有序。

partial_sort

    用于找出容器中N个最小的元素,并将其排列为升序并放在容器前面。

partial_sort_copy

    本质上与partial_sort功能相同,增加了将排序元素复制到另一个容器元素段的功能。

partition

    用于对一定区间的元素进行部分排序,满足条件的在序列前边,不满足的在后边,原理是在前面找到不满足条件的元素与后面满足的元素进行交换。

random_shuffle

    将指定范围内的元素顺序进行随机打乱,参数为两个迭代器,无返回值。

reverse

    将指定范围内的元素进行重新反序排列。

reverse_copy

    与reverse功能相同,增加将反序后元素复制到另一个容器的功能。

rotate

    将指定范围内的元素进行旋转,旋转后的元素相对位置不变,第二个参数对应元素为容器首元素。

rotate_copy

    与rotate功能相同,增加将元素复制到另一个容器的功能。

sort

    用于对容器中的元素进行排序,默认为升序,不能保证相等元素的顺序。

stable_sort

    用于对容器中的元素进行稳定性排序,默认为升序。

stable_partition

3、删除和替换算法(15个)

copy

    将指定范围内的元素复制到以第三个参数为开头的空间中

copy_backward

    与copy功能相似,但是会从第一个范围的最后一个元素到第一个元素,存放空间是从指定位置向前复制。

iter_swap

    交换两个迭代器所指向的值。

remove

    移除与value相等的元素,不是删除,而是使用后面元素将前面元素进行覆盖,不改变其他元素的先后顺序。

remove_copy

    将所有不匹配的元素复制到指定容器,可以是容器本身,返回被复制后末元素的下一个位置。

remove_if

    与remove相似,只不过移除条件为指定谓词。

remove_copy_if

    与remove_copy相似,复制条件为指定谓词。

replace

    将指定区间内的所有old_value都以new_value取代。

replace_copy

    与replace类似,唯一不同是将新序列复制到指定容器中,返回被复制后的容器最后元素的下一位置,原序列没有任何改变。

replace_if

    将指定区间内满足谓词条件的元素以new_vslue取代。

replace_copy_if

    与replace_copy类似,唯一不同是添加了谓词条件。

swap

    用来交换两个对象的内容。

swap_ranges

    用来交换两个序列,需要传入三个参数,两个序列长度要相同,返回第二个序列最后一个被交换元素的下一个位置。

unique

    用来通过覆盖的方式移除序列中连续重复的元素,返回不存在连续重复序列(新序列)的最后元素的下一个位置。

unique_copy

    将unique处理的序列赋值到新的容器中,不对原序列更改。

4、排列组合算法(2个):计算容器中按照一定顺序的所有可能排列组合

next_permutation

    对一组序列进行重排列,得到的序列为原序列的下一个字典序,若存在下一个字典序返回true,若不存在返回false。

prev_permutation

    与next_permutation相似,唯一不同是得到原序列的上一个字典序。

5、算术算法(4个)

accumulate

    用来计算初始值init和指定区间[first,last)内所有元素的总和。

adjacent_difference

    用来计算相邻元素之间的差值,并将它们保存到另一个序列中,第一个元素不动,用第二个元素减去第一个,以此类推。

inner_product

    对向量做内积运算,并与初始值相加。

partial_sum

    用来计算序列中从第一个元素开始不断增加的序列和,第一个输出值就是第一个值,第二个输出值是前两个之和,以此类推。

6、生成和异变算法(6个)

fill

    将指定区间内所有元素改填为value。

fill_n

    将区间内前N个元素改填为value,之传入起始位置,有可能出现越界,返回被填入的最后一个元素的下一个位置。

for_each

    用仿函数Function去访问指定区间的每一个元素。

generate

    将仿函数Gen()的结果填写到指定区间。

generate_n

    将仿函数Gen()的运算结果填写到区间的前n个位置。

transform

    用仿函数F访问区间内的元素,并将函数返回值保存到另一个序列中,返回输出序列最后一个元素的下一个位置。

7、关系算法(8个)

equal

    判断两个序列对应元素是否相等,若相等返回true,否则返回false,第二个序列多出的元素不予考虑。

includes

    比较两个集合,若第二个集合的元素全部来自于第一个集合返回true,否则返回false。

lexicographical_compare

    比较两个序列的字典序,若第二个序列的字典序大于第一个序列的字典序就返回true,否则返回false。

max

    取两个对象中的较大值。

max_element

    返回指定区间中最大元素的位置。

min

    取两个对象中的较小值。

min_element

    返回指定区间中最小元素的位置。

mismatch

    用来比较平行两个序列,指出序列的不匹配点,返回一对迭代器pair。

8、集合算法(4个)

set_union

    取set1与set2的并集存入set3,需要5个参数,不影响set1和set2的原始内容。

set_intersection

    取set1与set2的交集存入set3。

set_difference

    取set1中对于set2的补集并存入set3。

set_symmetric_difference

    取set1和set2不共有的元素并存入set3。

9、堆算法(4个)

make_heap

    用于将一个容器建成堆,默认为大顶堆。

pop_heap

    将第一个元素与最后一个元素进行交换,并将前n-1元素重新建成堆。

push_heap

    将新元素插入到容器末尾,并建堆。

sort_heap

    对一个大顶堆(小顶堆)进行排序,第三个参数与make_heap一致,大顶堆为升序,小顶堆为降序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值