使用迭代器
begin成员负责返回指向第一个元素的迭代器:
//b表示v的第一个元素,e表示v尾元素的下一个位置 auto b = v.begin(), e = v.end();//b和e的类型相同
end成员则负责返回指向容器“尾元素的下一位置”的迭代器,这样的迭代器仅是个标记,表示已经处理完了容器中的所有元素,end返回的迭代器成为尾后迭代器。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。tip:容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
迭代运算符
标准容器迭代器的运算符 | |
*iter | 返回迭代器iter所指元素的引用 |
iter->mem | 解引用iter并获取该元素的名为mem的成员,等价于(*iter).mem |
++iter | 令iter指示容器的下一个元素 |
--iter | 令iter指示容器的上一个元素 |
iter1==iter2 | 判断两个迭代器是否相等(不相等),如果两个迭代器指示的是同一个元 |
iter1!=iter2 | 素或者它们是同一个容器的尾后迭代器,则相等;反之,不相等 |
执行解引用的迭代器必须合法并确实指示着某个元素,试图解引用一个非法迭代器或者尾后迭代器都是未被定义的行为。
利用迭代器把string对象的第一个字母改写了大写形式:
string s("some string"); if (s.begin() != s.end())//确保s非空 { auto it = s.begin();//it表示s的第一个字符 *it = toupper(*it);//将当前字符改成大写形式 }
将迭代器从一个元素移动到另一个元素
迭代器使用递增(++)运算符来从一个元素移动到下一个元素。
Note:end返回的迭代器并不实际指示某个元素,所以不能对其进行递增或解引用的操作。
利用迭代器及其递增运算符将string对象中第一个单词改写为大写形式:
//依次处理s的字符直至我们处理完全部字符或者遇到空白 for(auto it=s.begin();it!=s.end()&&!isspace(*it);++it) * it = toupper(*it);//将当前字符改成大写形式

更多精彩