STl学习记录(3) - 迭代器与仿函数

0. C++标准库的算法是什么?

容器,是个类模板
算法,是个函数模板
迭代器,是个类模板
仿函数,是个类模板
适配器,是个类模板
分配器,是个类模板

算法(Algorithm)看不见容器,对其一无所知,所以,它所需要的一切信息都必须从迭代器(Iterator)。

算法通过询问迭代器一些问题,来了解一些信息(比如,迭代器如何“走”),迭代器必须能够回答算法的所有提问,才能搭配该算法完成所有的操作。

1. 迭代器的分类

GNU中迭代器源码如下:
在这里插入图片描述

迭代器有五种分类:

  • input_iterator_tag
  • output_iterator_tag
  • forward_iterator_tag:只能往前走(forward_list)
  • bidirectional_iterator_tag:可以前后走,但不能跳(list,rb_tree(set、map、multiset、multimap))
  • random_access_iterator_tag:可以跳(array、vector、deque)

为什么用继承来表示,而不用1,2,3…这种整数来表示?

代码可以写的很漂亮~

2.迭代器分类对算法的影响

比如,标准库中的copy函数,对不同类型的迭代器,有不同的加速策略,无所不用其极。

标准库中的模板函数,虽然传进来的参数一般可以是任意类型,但是源代码中有一些暗示,比如sort函数:
在这里插入图片描述
它的模板参数名字可以任意,但是这里用了RandomAccessIterator,就是暗示使用代码的人,这里最好传进来一个这个类型的迭代器,否则我也会让你运行,但是到后边编译的时候会出错。

3. 仿函数

仿函数,写法上像函数调用,其实是一个类的小括号重载。

4. 适配器

适配器,是为了统一某一些函数模板而产生的,简单来说,一个array容器,就是内含了一个基本的c语言数组,包装了一下,方便标准库中的模板方法调用,这个封装操作,就可以说是一个适配的过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值