六、迭代器:
6.1、概念:
6.1.1、iterater和容器其实是分开的。
6.1.2、非const的iter的是可以修改的、而const的iter是不可修改的,除此之外所有的东西都是一样的。
两个的设计逻辑上是两个不同的iter,但是又支持互相转换。
6.1.3、iterator中的拷贝构造是默认的拷贝构造,进行的是浅拷贝,因为我们需要对容器中的元素进行操作。
6.2、分类:
6.2.1、输入迭代器(InputIterator) 只读
1、只能够读取(支持 val = *iter(读), 不支持 *iter = val(写))
2、支持 -> (间接访问)、 ++(自加)。
3、对比只支持 == 和 != 。
6.2.2、输出迭代器(OutputIterator) 只写
1、支持 *iter = val(iter里面元素的深浅拷贝问题)
2、无间接访问(不能读)、支持 ++ 。
3、不支持对比操作。
6.2.3、前向迭代器(ForwardIterator)
1、单向遍历,
2、支持 ++、不支持 --、支持输入&输出迭代器功能。
3、对比只支持 == 和 != 。
6.2.4、双向迭代器(BidirectionalIterator)
1、双向遍历
2、支持++、--、支持输入&输出迭代器功能
3、对比只支持 == 和 != 。
6.2.5、随机迭代器(RandomAccessIterator)
1、支持:++、--、+、-、+=、-=。
2、比较支持:==、!=、<=、<、>、<=。(这里及以上提到的比较说的是迭代器本身的比较,并不是迭代器指向值得比较)
3、作用于同一块空间(比如:数组),而以上的是一些不连续的内存空间(无对比意义),所以存在<=、<、>、<=。这些操作符重载。