iterator需要遵循的原则
iterator是算法和容器的桥梁,算法要知道要处理的容器范围,算法在操作的时候,很可能要知道这个iterator有哪些性质来做最佳化的动作
iterator至少要回答3个问题:
1.iterator_category
2.different_type
3.value_type
实际设置了五种,还有reference和pionter未被使用过
所以iterator必须定义好这5种类型
那算法问问题,iterator答,traits用在那里呢?
当iterator是一个自然指针的时候,它并不是class,没有办法回答问题的时候,需要一个中间层来判断,当iterator是class时直接回答,是指针的时候用别的方式回答,这个中间层就是traits
所以为了解决这个问题,traits就用了偏特化来分离,当是pionter或者是const pointer时特化
但是为什么const pointer回答的value_type是T呢,因为问value_type主要就是来声明变量的,用const是常量就无法改变了
traits完整版