初识迭代器

迭代器是一个较为抽象的概念,在C++的标准中并没有给出明确的定义。在C++ Primer中文版第5版的P95指出:迭代器是一种“通用机制”,也有人说迭代器是一个类似指针的概念,但学习Code并不是做文学工作,没有必要纠结其具体定义。

在C++中,迭代器是容器类和容器类行为(又叫算法、操作)之间的桥梁。

以vector为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vector<int>:: iterator iter;  //定义了一个iterator类型迭代器iter,此类型的对象可读可写
vector<int>:: const_iterator test; //定义了一个const_iterator类型迭代器test,只能读,不能修改其所指的元素值

vector<int> arr; //定义一个int类型vector arr
auto a = arr.begin() , b = arr.end();
//利用auto关键字定义了a和b,用于接收arr迭代器成员begin和end返回的值,其中a指向arr第一个元素的位置,b指向了arr尾元素的下一个位置
//begin和end返回的到底是iterator类型,还是const_iterator类型的迭代器,取决于对象是不是常量;通俗解释:有const修饰的是常量,没有就不是
//cbegin和cend返回的一定是一个const_iterator类型迭代器

//关于iter的常用运算
*iter; //返回迭代器iter所指元素的引用,返回值是一个“引用”,所以要用引用接收这个返回值
iter -> next; //解引用iter,并访问该元素中名为next的成员
//箭头运算符是一种“间接”的访问方式,是通过指针访问其成员;另一种“点”运算符,是直接访问其成员

在顺序容器中,如果某操作会改变容器的大小,例如push_back,则容器对象的迭代器会失效,因为可能涉及存储空间的再分配,此时将迭代器理解成指针即可明白原因

当迭代器和一个整数值进行加减运算后,结果任为一个迭代器。而当两个迭代器进行加减运算后,结果是一个名为 difference_type类型的带符号整型数

关于迭代器的描述与应用更多在容器章节,后续需要持续补充