C++迭代器的简单使用

此文为阅读笔记,内容基本出自书中。

1. 基本概念

    使用下标访问对象的成员的最基本方法有三种:string对象的字符访问,vector对象的元素访问,迭代器。

    迭代器类似于指针类型,也提供了对对象的间接访问。使用迭代器可以访问某个元素,也能从一个元素移动到另外一个元素。迭代器分为有效和无效,有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一个位置,其他所有情况都属于无效。

2. 使用迭代器

    有迭代器的类型都拥有名为begin和end的成员,其中begin成员负责返回指向第一个元素或第一个字符的迭代器;end成员则负责返回指向容器(或string对象)尾元素的下一个位置的迭代器,这个迭代器被称作尾后迭代器或者简称为尾迭代器,并没有实际含义,仅作为已经处理完成容器中的所有元素的标记。

    若容器为空时,begin和end返回的是同一个迭代器。

    begin和end返回的具体类型由对象是否为常量决定,如果对象是常量,则返回const_iterator;如果对象不是常量,则返回iterator。作者建议对于只需读操作而不需写操作最好使用常量类型,C++11引入的cbegin和cend函数用于专门得到const_iterator类型的返回值,无论对象本身是否为常量。

2.1 修改字符串

    要求:将string对象中的第一个字母修改为大写形式。

    实现代码:

#include <iostream>
int main(void) {

    std::string s("hello world!");
    if (s.begin() != s.end()) {
        auto it = s.begin();
        *it = toupper(*it);
    }

    std::cout << s << std::endl;

    return 0;
}

    输出效果:

   Hello world! 

2.2 移动元素

    要求: 将string对象中的第一个单词改写为大写形式。

    实现代码:

#include <iostream>
int main(void) {
    std::string s("hello world!");
    for (auto it = s.begin(); (it != s.end() && !isspace(*it)); ++it) {
        *it = toupper(*it);
    }

    std::cout << s << std::endl;

    return 0;
}

    实现效果:

HELLO world!

猜你喜欢

转载自blog.csdn.net/qq_38609565/article/details/107325921
今日推荐