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一致,大顶堆为升序,小顶堆为降序。