计算机每一个比特位,都有两种表示,0和1.一个字节,8个比特位,最大值255,最小值0.
2^10=1k 2^20=1M 2^30=1G
32位操作系统,一个地址值用4个字节来记录。
32位的地址,最大值2^32-1,最小值为0. 2^32是4G,所以
你已知道指针,指针有 几种动作,* 解引用, ++自增, - -减减,两个同类型 指针 相减。指针 +加整数。指针 +加整数。迭代器,是一个有指针 动作能力 的对象 为什么要生产 迭代器 呢?因为很多的算法,目的都是 操纵数据,而指针 是操作数据 最强大的。。那么能不能构造一种对象?拥有指针的这种优点?以后操作数据 都通过这种对象去 操纵 数据,而且迭代器拥有指针所没有的优点,因为他是对象,他能拥有属性,所以它能携带更多的信息。这些携带的信息能提供给算法实现更强大的功能。
迭代器是一个对象,那么迭代器 把多少信息 集中在 对象里面呢?我们的计算机科学家们经过研究,得到了那么几种共识。。迭代器的类型,iterator_catagory 是必须提供的。
数据结构,你就明白了,有数组,有双向链表,这些数据结构就迫使操纵它们的指针,行为受限,数组的指针,可以随机访问宿主的任何一个元素,双向链表,它的指针可以向前移动,也可以向后移动,而单向链表,它的指针只能向前移动,那么这就构成了三种类型的迭代器,
而我们对数据的超重,有的时候需要控制读写的权限,比如有的数据只能读,比如有的数据只能写,那么这就又出现了两种迭代器的类型。
这五种迭代器,就构造了这样一种继承关系这一段代码,他们都是一个空类,空类的意思就是说,他们只有类的名称,而没有类
的属性。而且空类之间也是可以继承的,
这就把5种迭代器,相互之间的关系给确定了下来
迭代器,它的功能就相当于指针,
既然是指针,那么她就会指向
要被操纵的数据,
这个数据是什么类型的?
这种信息也是可以放入迭代器里面的,这
那么就产生了一个问题,两个指针相减,它的值是什么数据类型
就是valueType的来由。。
指针有一个动作,是++++这个动作,表示指针,指向下一个 要操纵的数据。。
++,我们在指针的时代,
就先指明了 ++ 等价于 +1
那么回过头去看两个指针相减,
两个指针相减得出的结果,就是一个整数n,
这个整数n,表明了p1经过n次++操作
实际上,diffenceType的本质就一个整型int
迭代器既然是操纵数据,
虽然迭代器是有指针动作的对象,但是迭代器毕竟不是指针,
然而有的时候,我们需要知道,迭代器指向的数据 的 指针是什么类型?
这就是pointer类型的来由。。
我们有时候要知道, 迭代器 指向的数据 的引用类型。
这就是reference的来由。。
你要死死记住一个真相,迭代器是一个对象,只是有指针的动作,
迭代器并不是指针,
但是迭代器可以当成指针来用。。
迭代器是对象,
他在对象里面集中了很多的信息,
这种手法 就是 triats
操纵数据的步骤,,就是我们俗称的算法,
我们把这个步骤抽象出来,就是policy
你已经看到了模仿指针的对象,
我们的计算机科学家,又提出了一种想法,
能不能让对象 模仿 函数的动作?
这就是 仿函数对象的 来由。
对象如何模仿函数的动作呢?
这就是 重载 操作符
operator ()