迭代器是用来访问string对象或vector对象的元素的,类似于下标运算和指针。
其对象是容器中的元素或string对象中的字符;
使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素。
不同于指针,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员;
比如,这些类型拥有名为begin和end的成员,begin成员负责返回指向第一个元素(或第一个字符)的迭代器,end成员则负责返回指向容器“尾元素的下一个位置”的迭代器;
如果迭代器为空,则begin和end返回的是同一个迭代器;
标准容器迭代器的运算符
和指针类似,也能通过解引用迭代器来获取它所指向的元素,执行解引用的迭代器必须合法并确实指向着某个元素。
string s("some String"); if (s.begin() !=s.end() ) //确保s非空 { auto it=s.begin(); //it 表示s的第一个字符 *it=toupper(*it); }
begin与end运算符
结合解引用与成员访问操作
解引用迭代器可以获得迭代器所指向的对象(类似与指针)。例如:若it是Vector对象的迭代器,
检查其元素是否为空,只需检查it所指向的字符串是否为空;
(*it).empty(); // it->empty();
某些对vector对象的操作会使迭代器失效
但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素;
迭代器运算
迭代器的算术运算
可以令迭代器和一个整数值相加(或相减),其返回值是向前(或向后)移动了若干个位置的迭代器。
auto mid = vi.begin() + vi.size() / 2; //vi.size()=10,则mid指向元素是vi[10]
if(it<mid) //处理vi前半部分的元素
使用迭代器运算(二分搜索)
代码
原文:http://www.cnblogs.com/iloverain/p/5749676.html