//前言,迭代器和指针区别:https://www.zhihu.com/question/54047747
迭代器——用于访问string对象字符、vector对象元素以及其他容器中元素的一种机制。这些对象都是拥有迭代器的类型,这些类型拥有返回迭代器的成员。如成员 begin 和 成员 end。begin用于返回指向第一个元素/字符的迭代器,end用于返回指向容器“尾元素的下一个位置”(即尾元素)的迭代器。
//非常有趣的是,迭代器的准确类型一般无法获知,这点和引用、指针截然不同。也是让笔者非常困惑的一点:类型都不知道,那迭代器到底是个什么东西~~✧ʕ̢̣̣̣̣̩̩̩̩·͡˔·ོɁ̡̣̣̣̣̩̩̩̩✧,所以一般使用auto来定义使用迭代器。例:
string s(10,c);
auto b = v.begin(), e = v.end();
迭代器运算符如下:
1.*iter //返回迭代器iter所指元素的引用
2.iter->men //解引用iter并获取该元素的名为men的成员,等价于(*iter).men
3.++iter //令iter指向容器的下一个元素
4.--iter //另iter指向容器的上一个元素
5.iter1 == iter2
6.iter1 != iter2 //判定两个iter是否相等
//编程小tip:在for循环语句中,C++风格是使用!=更多一些,而非将<作为条件判断,因为这种编程风格在标准库提供的所有容器上都有效。
尽管迭代器准确类型一般无法获知,但是迭代器大致类型还是分为两类:iteration 和 const_iteration 两种。前者对象可读可写,后者对象只读不可写。定义迭代器类型的代码示例如下:
vector<int>::iterator it; //it能读能写vector<int>中的元素
vector<int>::const_iterator it1; //it1只能读取vector<int>中的元素
迭代器的运算就是容器对应位置之间的关系运算,比较简单,略过。