迭代器分类:
STL里面所有的算法都是通过迭代器来进行数据之间的操作。
STL设计不同种迭代器视为了安全,有相应的权限。
1:输入迭代器(InputIterator):
只能够读取,val = *iter;,支持->操作(间接访问操作),支持++,==,!=操作,不支持>,<操作,其他的操作都不支持(没有op=,不可更改)
eg:*iter = *last;,这样的操作就是不可行的,不可以给输入迭代器赋值,
2:输出迭代器(OutputIterator):
支持*iter = *last;操作,但本省要注意深浅拷贝。不支持间接访问(->),与输入迭代器是对立的关系
不支持==和!=操作(认为输出迭代器没有进行比较的必要)
3:前向迭代器:
可以输入和输出,支持++操作不支持--操作,支持==,!=操作
4:双向迭代器:
双向遍历,++--都支持,输入输出,==,!=都支持
5:随机迭代器:
支持++,--,+=,-=,!=,输入输出,>,<,>=,<=……操作。
+=,-=的支持可以提高迭代器运算效率(相比++,--操作)。
随机迭代器是作用于同一块连续的空间,所以支持><比较操作。
迭代器初始化:
1:C++标准库包含C标准库和STL。
STL:
分配器:为所有容器分配内存
容器:按规则存储数据
迭代器:指向容器中的元素
算法:通过迭代器进行运算
C标准库:
2:任何容器都有typedef定义的各种类型,统一了接口,泛型编程(编译时处理)出来的运行效率是要比面向对象(运行时处理)快的。
3:所有的容器都有value_type,pointer……。
4:在继承体系里面,越下面的类是越完全的,vector里面iterator继承于const_iterator,很多方法就可以直接调用,两者的逻辑是完全一样的。