通过使用下标运算符可以向string和vector对象进行访问,还有一种方法就是使用迭代器,就像是指针类型一样,实现对对象的间接访问,使用迭代器可以实现从一个元素移动到另一个元素的过程。
begin和end迭代器
如:
vector<int> v{a,b,c,d,e,f,,g,h};
auto a = v.begin(),b = v.end(); //a表示v中的第一个元素,b表示v中尾元素后的下一个位置,在这里a和b的返回值类型为vector<int>::iterator
迭代器运算符
*iter 返回的迭代器iter所指向元素的引用,通过解引用操作符来获取它所指示的对象
iter-> men 与解引用iter获取该元素的名为men的成员,等价于(*iter).men
++iter 向后一个元素移动
--iter 向前一个元素移动
iter1 == iter2 判断两个迭代器是否相等
iter1 != iter2
*iter 的例子
值得注意的是(*it).empty()与*it.empty()含义是不相同的,
(*it).empty();
*it.empty(); //错误,it是一个迭代器,它并没有empty()成员
string s1("some string");
for(s1.begin() != s1.end();auto it = s1.begin();++it)
*it = toupper(*it);
iter-> men的例子
访问的是对象中的成员,比如empty、size
for(auto it = text.begin();it != text.end() && !it -> empty();++it)
cout << *it << endl;
(*it).men与it->men作用相同
for(auto it = text.begin();it != text.end() && !(*it) .empty();++it)
cout << *it << endl;
迭代器类型
迭代器类型可以分为iterator和const_iterator两种,
vector<int>::iterator it; //it能读能写vector<int>的元素
vector<int>::const_iterator it1; //it1只能读不能写