STL 总结

来源:互联网 发布:淘宝买洗衣机可靠吗 编辑:程序博客网 时间:2024/05/01 21:05

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie


1.C++模板

函数模板:独立于类型的函数,可产生函数的特定版本

类模板:   独立于类型的类,可产生类的特定版本,如vectot<int>

2.stl 头文件

头文件

内容

头文件

内容

<iterator>

迭代器

<vector>

向量

<utility>

辅助功能

<deque>

双头队列

<memory>

内存管理

<list>

链表

<algorithm>

算法

<set>

集合与多重集合

<functional>

函数对象

<map>

映射与多重映射

<numeric>

数值运算

<stack>

    

 

<queue>

队列与优先队列


3.容器

1)顺序容器 

  vector:后部插入/删除,直接访问

实际上就是个动态数组,每次空间不够时会double它的存储空间。随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。


  deque:前/后部插入/删除,直接访问

也是个动态数组,随机存取任何元素都能在常数时间完成(但性能次于vector)。在两端增删元素具有较佳的性能。


  list:双向链表,任意位置插入/删除

双向链表,在任何位置增删元素都能在常数时间完成。不支持随机存取。


 2)关联容器

  set:快速查找,无重复元素
  multiset:快速查找,可有重复元素
  map:一对一映射,无重复元素,基于关键字查找

  multimap:一对一映射,可有重复元素,基于关键字查找


  map与set的不同在于map中存放的是成对的key/value。并根据key对元素进行排序,可快速地根据key来检索元素

 上述4种容器通常以平衡二叉树方式实现,插入和检索的时间都是O(logN)  


3)容器适配器

  stack:后进先出
  queue:先进先出
  priority_queue:优先级高的元素先出



4.迭代器

容器  迭代器类别

  vector  随机

  deque  随机

  list   双向

  set/multiset  双向

  map/multimap  双向 

  stack  不支持迭代器

  queue  不支持迭代器

  priority_queue  不支持迭代器


STL为迭代器提供了三个辅助函数:advance( )、distance( )、iter_swap( )


5.算法

1)非可变序列算法通常这类算法在对容器进行操作的时候不会改变容器的内容

循环

for_each()

对序列中的每个元素执行某操作

查找

find()

在序列中找出某个值的第一次出现的位置

find_if()

在序列中找出符合条件的第一个元素

find_end()

在序列中找出一子序列的最后一次出现的位置

find_first_of()

在序列中找出第一次出现指定值集中之值的位置

adjacent_find()

在序列中找出相邻的一对值

计数

count()

在序列中统计某个值出现的次数

count_if()

在序列中统计符合某个条件的值出现的次数

比较

mismatch()

找出两个序列相异的第一个元素

equal()

两个序列中的对应元素都相同时为真

搜索

search()

在序列中找出一子序列的第一次出现的位置

search_n()

在序列中找出一值的连续n次出现的位置



2)可变序列算法这类算法一般会改变所操作的容器的内容

复制

copy()

从序列的第一个元素起进行复制

copy_backward()

从序列的最后一个元素起进行复制

交换

swap()

交换两个元素

swap_ranges()

交换指定范围的元素

iter_swap()

交换由迭代器所指的两个元素

变换

transform()

将某操作应用于指定范围的每个元素

替换

replace()

用一个给定值替换一些值

replace_if()

替换满足条件的一些元素

replace_copy()

复制序列时用一给定值替换元素

replace_copy_if()

复制序列时替换满足条件的元素

 填充

fill()

用一给定值取代所有元素

fill_n()

用一给定值取代前n个元素

生成

generate()

用一操作的结果取代所有元素

generate_n()

用一操作的结果取代前n个元素

删除

remove()

删除具有给定值的元素

remove_if()

删除满足条件的元素

remove_copy()

复制序列时删除具有给定值的元素

remove_copy_if()

复制序列时删除满足条件的元素

剔除

unique()

删除相邻的重复元素

unique_copy()

复制序列时删除相邻的重复元素

反转

reverse()

反转元素的次序

reverse_copy()

复制序列时反转元素的次序

循环

rotate()

循环移动元素

rotate_copy()

复制序列时循环移动元素

随机

random_shuffle()

采用均匀分布来随机移动元素

划分

partition()

将满足某条件的元素都放到前面

stable_partition()

将满足某条件的元素都放到前面并维持原顺序



3)排序及相关算法

排序

stable_sort()

排序,并维持相同元素的原有顺序

partial_sort()

将区间个数的元素排好序

partial_sort_copy()

将区间个数的元素排序并复制到别处

第n个元素

nth_element()

将第n各元素放到它的正确位置

二分检索

lower_bound()

找到大于等于某值的第一次出现

upper_bound()

找到大于某值的第一次出现

equal_range()

找到(在不破坏顺序的前提下)可插入给定值的最大范围

binary_search()

在有序序列中确定给定元素是否存在

归并

merge()

归并两个有序序列

inplace_merge()

归并两个接续的有序序列

有序结构上的集合操作

includes()

一序列为另一序列的子序列时为真

set_union()

构造两个集合的有序并集

set_intersection()

构造两个集合的有序交集

set_difference()

构造两个集合的有序差集

堆操作

push_heap()

向堆中加入元素

pop_heap()

从堆中弹出元素

make_heap()

从序列构造堆

sort_heap()

给堆排序

最大和最小

min()

返回两个元素最小值

max()

返回两个元素最大值

min_element()

返回序列中的最小元素的位置

max_element()

返回序列中的最大元素的位置

词典比较

lexicographical_compare()

两个序列按字典序的第一个在前

排列生成器

next_permutation()

按字典序的下一个排列

prev_permutation()

按字典序的前一个排列




4)通用数值算法 

accumulate(累积算法)

partial_sum(累加部分元素和算法)

adjacent_difference(相邻元素差)

inner_product(内积算法)


6.函数对象(Function Object)



参考资料

1. C++STL简介

1 0