stl学习笔记

迭代器适配器是有迭代器的接口,但实际做的是其他事情。著名的有插入迭代器,流迭代器,反向迭代器


考虑到效率,stl没有很严格的异常检查,但保证两点:
对于基于节点的容器(list, set, map等),单个元素的插入操作实现commit-or-rollback
对于基于数组的容器,对结尾元素的插入实现success-or-no effect

deque的特性:
deque的接口和vector非常类似,但是没有reserve和capacity
deque在两端的插入非常快速,在中间插入较慢
deque支持随机访问,但所有成员不是都在一个连续的内存块中

set和map是用树存储和排序的,因此,不要修改set中的值和map中的key,只能增加和删除

 

stl迭代器辅助函数:

advance

distance

这两个函数可以根据迭代器的类型作不同优化,效率更高

 

反向迭代器

反向迭代器可以用正向迭代器转换过来,但转换后的位置有所改变,这是由于stl的区间都是闭开区间,这样处理后对两个迭代器定义的区间转换后可以直接使用 ,可以用base获得反向迭代器对应的正向迭代器

 

插入迭代器一般用赋值操作符实现对容器的插入

 

for_each是stl标准算法中唯一有返回的

预定义的函数适配器:bind1st, bind2nd, not1, not2

mem_fun_ref适用于对类对象引用调用函数

mem_fun用于对类对象指针调用函数

上述两个都要求是const成员函数

普通函数适配器ptr_fun

 

stl中用到多个区间的算法都要求第二个区间大于等于第一个区间
stl的算法操作不从容器删除元素,一是由于算法不了解容器的知识,二是为了效率

 

find算法系列是查找一个元素

search算法系列是查找一个区间,但find_end例外,可能是历史原因起来这个名字

transform可以从一个区间也可以从两个区间生成结果

没有copy_if函数,用remove_copy_if

用mismatch查找两个区间第一个不同的地方,如果返回的pair中都是end不表示区间相同,也可能是第二个区间较大。必须用equal比较区间相同

用copy_backward指定拷贝对象到目标的某个位置前

unique函数只删除连续的重复值

rotate可以实现数组的循环左移和游移效果

用prev_permutation 和next_permutation可以遍历容器内元素的排列

random_shuffle可以实现“洗牌”的效果

partition和stable_partition可以把容器根据一个值或者函数分成两个部分

heap算法可以产生堆序序列,其中的pop_heap不会直接删除元素,但会移动到最后一个

set系列函数都是对集合操作的模拟,但都容许有重复元素

merge和set_union非常类似,但merge不会对重复元素作处理

 

数值算法:

accumulate, 累加

inner_product, 内积

partial_sum, 计算到当前位置的和

adjacent_diffent, 计算相邻的差

 

其它容器:

stack

queue,接口类似stack,但pop返回第一个元素

priority_queue, 里面的元素按照堆序存放,pop返回最大的元素,如果都相等,返回第一个元素

bitset,模拟位运算

 

数值运算:

complex

valarray

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值