STL 算法 . 高级算法.

list为环型的双link list, 所以++,--即使到了最末也不会出问题的.
  而vector/heap,是线形空间,++/--是会出问题的;所以一定要预先考虑到
 
  heap堆的特点: 第一个是最大元素, de/add一个元素时间复杂度为log(n)
  make_heap(将数据转换为堆,调整整个堆), sort_heap(将堆有序序列化存储,这样就不是堆了;否则就一直是以堆的结构存在), push_heap(针对最后元素,调整堆的有关部分), pop_heap(将最大元素移到最后,调整堆的有关部分)
 
. 质变算法(mutating algorithms) & 非质变算法(nonmutating algorithms)
  质变算法:   copy, swap, replace/replace_copy, fill, remove, permutation, partition, random_shuffling, sort
  非质变算法: find, search, count, for_each, equal/mismatch, max/min
 
. 前闭后开区间, STL一般都是这种形式!
  如果, STL的泛型函数的两个参数市一对iterator,称为first,last
  STL习惯采用前闭后开的区间表示,即: [ first, last )
 
. 数值算法 (numeric).
  accumulate(累计运算), inner_product(内积运算), adjacent_difference(两个相邻元素运算), partial_sum(前i个累计运算)
  其中所有的运算部分都可以用仿函数来代替. e.g., minus<int>, plus<int>()
 
. 算法(algorithm). 
  如果参数形式为( first1, last1, first2 ), 即:区间1,区间2; 那么默认的结束的条件为:区间1-->直到last1;那么如果区间2的数目小于区间1的数目,则出现的结果是未知的. 其中如果是list类型,则结果未知,程序不崩溃; 如果是vector类型,则程序可能崩溃
 
  equal(枚举区间1的元素,和区间2比较)
  fill(将区间所有元素置值为x), fill_n(将某段区间的前n个元素置值为x)
  iter_swap(将游标所指的元素值交换), swap(将值交换)
  min/max, mismatch(找到第一个元素值不同的位置pair;如果区间2比区间1短,结果就不可预料了)
  lexicographical_compare(象比较字符串那样比较,而不是只比较较短的一个区间的元素数目)
 
  copy, 如果输入区间和输出区间有重叠,则结果可能错误,也可能正确. (如果在内部采用的是memmov则正确)
 
  集合运算,只能针对set/multiset, 不能针对hash_set, hash_multiset
  set_intersection(交集), set_union(并集), set_difference(差集), set_symmetric_difference(即(S1-S2)U(S2-S1))
 
. 高级算法,都是针对vector存储结构的,很多都是对于有序的vector
  ** 查找
  lower_bounder/upper_bounder, 折半查找某个值的,或最适合插入某值的位置
  equal_range, 折半查找,返回lower_bounder和upper_bounder的一对
  binary_search, 折半查找(调用lower_bounder)
 
  ** 排列组合
  random_shuffle, 随即排列,排列是空间均匀分布的,采取的算法是"the art of programing"上面的
  next_permutation/prev_permutation,前一个/后一个排列组合; (默认升序)
  算法是:从后到前扫描,找到顺序的相邻的元素(ab), 然后从最后查找大于元素a的元素x,将a和x交换位置, 最后将b以后的元素reverse(包括b)
 
  ** 排序
  sort, 采用了introsort(数目小时,采用插入排序;否则采用快速排序,如果快速排序递归太深则采用heap处理), O( n*log(n) )
  stable_sort, 当比较小的数目时(小于阀值threshold),采用插入排序;否则,采用归并排序(merge,需要缓冲中间结果,故空间方面不联想)
  inplace_merge, 将两个连接在一起的序列合并排序
 
  partial_sort/partial_sort_copy, 采取heap方式, 将后半部分pop到后面,在将前半部分heap_sort 
  nth_element,  比partial_sort更少的保证,不知道能用在什么地方 
 
  ** 分区
  stable_partition, 稳定的分区
  partition,分区(不稳定)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值