除了使用下标来访问vector对象的元素外,标准库还提供了访问元素的方法:使用迭代器。迭代器是一种检查容器内元素并且遍历元素的数据类型。
百科释义:
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。
1.容器的iterator类型
每种容器类型都定义了自己的迭代器类型,如vector:
vector<int> ::iterator iter;变量名为iter,可以读写vector中的元素。
2.begin和end操作
每种容器都定义了一队命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的元素指向第一个元素。
vector<int>::iterator iter=v.begin();
若v不为空,iter指向v[0]。
由end返回的迭代器指向最后一个元素的下一个,不存在,若v为空,begin和end返回的相同。
*iter;返回迭代器iter所指元素的引用
++iter即将迭代器向前移动一个位置(相反的--iter)
==和!=操作符来比较两个迭代器,若两个迭代器指向同一个元素,则它们相等,否则不想等。
举例:
string s("some string");
if(s.begin()!=s.end) //确保s非空
{
auto it=s.begin(); //it表示s的第一个字符
*it = toupper(*it); //改成大写
}
我们认定某个类型是迭代器当且仅当它支持一套操作,这套操作使得我们能访问容器的元素或者从一个元素移动到另外一个元素。