Part7 模板与泛型编程 Templates and Generic Programming

  • Rule47:请使用traits classes表现类型信息
    Use traits classes for information about types.

STL 主要由“用以表现容器、迭代器和算法”的templates构成,也覆盖了若干工具性templates,其中一个名为advance,用来将某个迭代器移动某个给定距离。
观念上advance只是做iter+=d动作,但是不可以全然那么做,因为只有random access迭代器才支持+=操作,面对其他迭代器种类,advance必须反复施行++或–,共d次。

5种STL迭代器分类
input迭代器只能向前移动,一次一步,客户只可读取(不能涂写)他们所指的东西,而且只能读取一次,他们模仿指向输入文件的阅读指针(read pointer);C++程序库中的istream_iterators是这一分类的代表。
output迭代器情况类似,但一切只为输出,它们只向前移动,一次一步,客户只可涂写他们所指的东西,而且只能涂写一次,他们模仿指向输出文件的涂写指针(write pointer);ostream_iterators是这一分类的代表。这是威力最小的两个迭代器分类。由于这两类都只能向前移动,而且只能读或者写其所指物最多一次,所以它们只适合“一次性操作算法”
forward迭代器可以做前述两种分类所能做的每一件事,而且可以读或写其所指物一次以上。STL并未提供单向linked list,但某些程序库提供了该数据结构,而指入这种容器的迭代器就是属于forward迭代器。
BiDirectional迭代器除了可以向前移动,还可以向后移动。STL的list迭代器就属于这一分类,set,multiset,map和mutimap的迭代器就是这一部分。
random access迭代器可以执行“迭代器算术”,也就是它可以在常量时间内向前或向后跳跃任意距离。vector,deque和string提供的迭代器属于这一分类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值