初识迭代器
Published on 2024-05-11 10:32 in 分类: C++学习 with niuma
分类: C++学习

初识迭代器

    一、为什么用迭代器

    要访问string和容器中的元素,可以通过下标运算符实现。但是只有少数容器实现了下标访问,所以需要一个更为通用的方式来访问,就引入了迭代器(iterator)。从这一点上看,迭代器和指针类似。

    二、迭代器的运算符

    操作符名称 作用
    *iter 返回迭代器所指向元素的引用
    iter->men 解引用iter并获取men成员
    ++iter 令iter指示容器的下一个元素
    --iter 令iter指示容器的上一个元素
    iter1 == iter2 判断迭代器是否相等,如果指向的是同一个元素或者都为尾后迭代器(end之后为空),则相等
    iter1 != iter2 否则不相等

    举例使用

    将string对象中小写改为大写,碰见第一个空白或者字符串完毕后停止。

    int main()
    {
        string s{"some string"};
        for(auto it = s.begin(); it != s.end() && !isspace(*it); it++)
        {
            *it = toupper(*it);
        }
        return 0;
    }
    

    三、迭代器的定义

    1、正向迭代器

    容器类名::iterator 迭代器名;

    2、常量正向迭代器

    容器类名::const_iterator 迭代器名;

    四、迭代器的类型

    使用Iterator和const_iterator来表示迭代器的类型

    vector<int>::iterator it;   
    vector<int>::const_iterator it2;    //it2只能读元素
    

    五、begin 和 end 运算符

    begin和end具体类型取决于对象是否是常量

    vector<int> a;
    const vector<int> b;
    
    auto it = a.begin();    //it类型为vector<int>::iterator 
    auto it2 = b.end();     //it2类型为vector<int>::const_iterator
    

    为了只读我们可以使用cbegin 和 cend

    vector<int> a;
    auto it = a.cbegin();    //it类型为vector<int>::const_iterator 
    
    

    六、迭代器失效

    以后

    七、迭代器运算

    运算 作用
    iter + n 前移n个元素,或者指向尾元素的下一个位置
    iter - n 后移n个元素,或者指向尾元素的下一个位置
    iter1 += n 同上,结果保存回iter1
    iter1 -= n 同上,将结果保存回iter1
    iter1 - iter2 得到两个迭代器的距离,iter1和iter2必须是同一个容器的元素,或者是尾元素的下一位置
    > >= < <= 判断迭代器的位置,在后面的大

    diffenernce_type是带符号整数,可以保存两个迭代器相减的距离

        vector<int> a;
        a.push_back(10);
        a.push_back(9);
        vector<int>::iterator it;
        auto len = a.begin() - a.end();
        //auto是difference_type类型
    
    posted @   baobaobashi  阅读(8)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
    · AI 智能体引爆开源社区「GitHub 热点速览」
    · Manus的开源复刻OpenManus初探
    · 写一个简单的SQL生成工具
    点击右上角即可分享
    微信分享提示