c++ stl使用与说明

1. for_each(起始迭代器,迭代器末尾+1,函数名);  //对范围内的元素进行操作,比如print
2.distance(first, last)函数用来计算两个迭代器的距离
3.setprecision()函数实现格式控制
  使用:#include <iomanip>
cout << "a=" << setprecision(2) << a <<endl;//保留两位小数

//a=0.20000001
cout.setf(ios::fixed);//没有fixed的话会输出0.2
//cout.unsetf(ios::fixed);  //关闭补0
cout << "a=" <<fixed<< setprecision(2) << a <<endl; //输出a=0.20

4.double temp = atof(&str_l[i]);//尽可能地将字符串转小数
5.list操作
push_front、push_back、erase、pop_front、pop_back
clear、remove//erase是以迭代器为基本单位,清除元素,改变size的值;remove是以value相等为标准,也改变size的值。
unique//移除数值相同的【连续】元素,只保留一个
splice(迭代器pos,list2) //将list2接合于pos所指位置之前,list2必须不同于*this
list1.splice(迭代器pos,list&,iter)//将i所指元素接合于pos之前,两个list可指向同一个
list1.splice(迭代器pos,first,last)//将first last之间的元素接合于pos之前,pos不能位于first与last之间
merge(l2)将l2所指内容合并到*this上,两个lists的内容都必须先经过递增排序
reverse、sort//list不能使用stl算法中的sort()[因为stl的sort只接受randomAccessIterator随机访问迭代器] 只能使用自己的sort

6.deque
deque与vector的差异:
    1 deque可以在常数时间内对头端进行元素插入或移除
    2 deque没有容量概念,由动态地以分段连续空间组合而成
对deque排序时为提高效率应将deque复制到vector,排序后复制回deque
vector空间增长过程
    1寻找更大空间
    2将原数据复制过去
    3释放原空间
deque操作
pop_back pop_front clear erase insert

7.容器底部实现说明
heap内含一个vector
priority_queue内含一个heap,
stack(container adapter)和queue(container adapter)都内含一个deque(封闭deque的头部操作实现stack,以list也可以,封闭deque底端的出口和前端的入口形成queue ,stack和queue没有迭代器)
set/map/multiset/multimap都内含一个RB-tree红黑树
hash_x都内含一个hash table

8.heap以算法形式供应
make_heap(first,last)
push_heap(first,last)
pop_heap(first,heap)
sort_heap(first,heap)

9.priority_queue(container adapter)
默认通过max-heap完成.heap是以vector表现的complete binary tree
priority_queue带有权值概念,无迭代器

10.slist单向链表(不在标准范围内)
#include <slist> //vs2013不支持

11.set
set查找时既可以使用STL算法find()也可以使用set容器的find()方法,因为前者是遍历,Set本身有序所以后者更有效率
set的元素可以插入、删除,但是不可更改。不能通过迭代器来改变set元素,因为破坏set的有序性会导致非预期的行为
count() find merge contains是否包含某元素 equal_range返回匹配特定键的元素范围 lower_bound返回首个不小于给定键的元素的迭代器 upper_bound返回指向首个大于给定键的元素的迭代器 key_comp返回用于比较键的函数 value_comp范湖用于在value_type类型的对象中的比较键的函数
12.map
map的所有元素都是pair类型,可以插入删除但是不能更改map的键值,愿意是会破坏键值的有序性,但可以更改实值

13.multiset/multimap
set和map不允许键值重复,multiset/multimap允许键值重复

14.hash table
解决hash碰撞3方法
1线性探测,若碰撞,则找下一个可用的空间使用。会导致主集团现象,插入操作不断解决碰撞问题最后才找到可用位置,但同时又增加了主集团的已用面积。
元素的删除必须用惰性删除:只标记删除序号,实际删除操作待表格重新整理时再进行——因为hash table中的每一个元素不仅描述它自己,也关系到其他元素的排列。
2二次探测消除主集团问题,但可能造成次集团问题
3开链,每个表格元素维护一个lsit

15.stl算法
accumulate  元素累计(加减)
adjacent_difference 相邻元素的差额  adjacent邻
adjacent_find 查找相邻而重复(或符合某条件)的元素
binary_search 二分查找
Copy  Copy_backward逆向复制 Copy_n复制n个元素
count/count_if在特定条件下计数
equal  equal_range 在有序区间中寻找某值
fill fill_n
find循环查找 find_if循环查找符合条件者 find_end 某个子序列最后一次出现find_first_if
for_each对区间内每个元素进行特定操作
generate以特定操作的运算结果填充区间 generate_n
includes是否涵盖于某序列之中
inner_product内积
inplace_merge合并并就地替换
lexicographical_compare以字典顺序进行比较
low_bound将指定元素插入区间之内而不影响区间之原本顺序的最低位置
max最大值  max_element最大值所在位置
merge
min min_element
mismatch找出不匹配点
next_permutation获得下一个排列组合
nth_element重新安排序列中的第n个元素的左右两端
partial_sort局部排序  partial_sort_copy局部排序并复制到它处
partial_sum局部求和
partition分割
pre_permutation获得前一个排列组合
power求幂
random_shuffle随机重排元素
remove删除某类元素 remove_copy remove_copy_if
replace替换某类元素 replace_if replace_copy_if
reverse reverse_copy
rotate旋转 rotata_copy
search查找某个子序列 search_n
set_difference差集
set_intersection交集
set_symmertic_difference对称差集
set_union并集
sort
stable_partition分割并保存元素的相对次序
stable_sort排序并保持等值元素的祥对此徐
swap
swap_ranges交换(指定区间)
transform以两个序列为基础,交互作用产生第三个序列
unique将重复的元素折叠偏缩,使之唯一
unique_copy
upper_bound将指定元素插入区间之内而不影响区间之原本顺序的最高位置
make_heap
pop_heap
push_heap
sort_heap

16.当注释掉大块代码时,使用"#if 0"比使用"/**/"要好,因为用"/**/"做大段的注释要防止被注释掉的代码中有嵌套的"/**/",这会导致注释掉的代码区域不是你想要的范围,其间的代码块不会被编译。  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章