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);//将当前字符改成大写形式

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄