C++标准库与内核分析第三讲(六大部件源码分析)

1.准备工作

在第二讲中主要讲到标准库中容器的源码,这里主要讲一讲标准库算法。如下
通常算法会有第二个版本,名称相同,参数不同,如下算法,第一个有两个参数,第二个有三个参数,其中第三个参数,就是允许我们用户自己传入一个准则。例如排序算法,我们就可以传入一个准则,即如何比较大小。Algorithms如果需要知道容器的某一些性质,则iterators必须进行回答,如果iterators没办法回答,则编译器编译到这一行语句的时候就会出错。
这里写图片描述
前面我们已经提到迭代器应该提供五个相关类型,由于搭配着算法,所以我们来了解在分类这件事情上是如何设计的。我们看看容器的性质,vector,array是连续空间,所以其迭代器类型为random_access,而deque虽然是分段连续,但是对外号称连续所以其迭代器类型也应为random_access.而list 为双向链表,所以其迭代器类型为bidirectional_iteration,而forword_list则为forward_iterator.至于set,multi_set,map和multi_map虽然我们看不出来,但是他们底部是以红黑书做支撑的,红黑树是双向的,所以其迭代器类型为bidirectional_iteration。其次unordered_set,unordered_multiset,unordered_map,unordered_multimap我们知道其底部是以哈希表做支撑的,他是一个链表,所以取决于这个链表是双向链表还是单向链表,这样就可以判断迭代器的类型。至于input_iterator_tag和output_iterator_tag则是输入输出流的迭代器类型,这两个很特别。
这里写图片描述

现在我们来看看istream_iterator的iterator_category..不同版本的编译器做法不一样,但是他们提供的接口必须一致。我们可以从下面的源代码中看到,istream_iterator中明确定义了iterator的类型为input_iterator。ostream_iterator类似。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值