本文为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.算法
循环 | for_each() | 对序列中的每个元素执行某操作 |
查找 | find() | 在序列中找出某个值的第一次出现的位置 |
find_if() | 在序列中找出符合条件的第一个元素 | |
find_end() | 在序列中找出一子序列的最后一次出现的位置 | |
find_first_of() | 在序列中找出第一次出现指定值集中之值的位置 | |
adjacent_find() | 在序列中找出相邻的一对值 | |
计数 | count() | 在序列中统计某个值出现的次数 |
count_if() | 在序列中统计符合某个条件的值出现的次数 | |
比较 | mismatch() | 找出两个序列相异的第一个元素 |
equal() | 两个序列中的对应元素都相同时为真 | |
搜索 | search() | 在序列中找出一子序列的第一次出现的位置 |
search_n() | 在序列中找出一值的连续n次出现的位置 |
复制 | 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() | 将满足某条件的元素都放到前面并维持原顺序 |
排序 | ||
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() | 按字典序的前一个排列 |
accumulate(累积算法)
partial_sum(累加部分元素和算法)
adjacent_difference(相邻元素差)
inner_product(内积算法)
6.函数对象(Function Object)
1. C++STL简介