STL迭代器的基础应用

STL迭代器的应用

STL迭代器分类

  • 迭代器的定义方法:
类型作用定义方式
正向迭代器正序遍历STL容器容器类名::iterator 迭代器名
常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名
反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名
常量反向迭代器以只读方式逆序遍历STL容器容器类名::const_reverse_iterator 迭代器名
  • 迭代器与自动类型推导:C++11引入了auto关键字,用于自动类型推导,可简化记忆复杂的数据类型名,自动类型推导要求变量必须进行初始化。语法为auto 变量名=值

  • 迭代器本身不支持输入和输出,因此不能像指针一样输出查看其地址。

  • 在对迭代器所指向的元素进行操作时,必须像指针一样,对迭代器进行解引用操作,即*迭代器名。若对迭代器指向的元素进行修改,则与指针一样,其实际的值也会被修改。

  • 特殊位置的迭代器:

    • 类名.begin():正向迭代器,指向容器正向上首个位置的迭代器
      类名.cbegin():常量正向迭代器,其余与begin相同
    • 类名.end():正向迭代器,指向容器正向上末个位置的下一个位置的迭代器
      类名.cend():常量正向迭代器,其余与end相同
    • 类名.rbegin():反向迭代器,指向容器反向上首个位置的迭代器
      类名.crbegin():常量反向迭代器,其余与rbegin相同
    • 类名.rend():反向迭代器,指向容器反向上末个位置的下一个位置的迭代器
      类名.crend():常量反向迭代器,其余与rend相同
      STL特殊位置迭代器
  • 迭代器与指针一样,支持算数运算。迭代器的算数运算具有方向性:在进行算数运算时,运算方向沿着迭代器的方向。
    如正向迭代器进行++时,为沿着正向进行++,即移动到当前迭代器的下一个位置;反向迭代器进行++时,为沿着反向进行++,相对于正向而言,实际是移动到了当前的前一个位置。
    迭代器运算方向

  • 获取迭代器的位置:使用std::distance(迭代器1,迭代器2),为迭代器2-迭代器1。

  • 基于范围的for循环:C++11引入了基于范围的for循环,用于更简便的正序遍历容器(包括C数组),但不支持逆序遍历容器。在基于范围的for循环中,循环变量就是元素本身,无需再进行解引用操作。若需要在基于范围的for循环中对元素进行修改,可与引用进行配合使用。循环头的语法为:

    for (auto element : container) {//element直接表示容器中的每一个元素,无需再进行解引用。container既可以为STL序列容器,也可以是C数组
    }
    for (auto &element : container) {//element表示容器中的每一个元素的引用,通过修改引用可直接修改容器内元素
    }
    

迭代器应用实例

此处仅为说明迭代器作用而举例,实际上vector的I/O方法并不止这些。

一维vector的正序输入、正序输出

  • 手动定义迭代器
vector<int>v(10);
for(v::iterator i=v.begin();i!=v.end();i++)cin>>*i;//注意必须解引用迭代器,否则会报错。对迭代器指向的元素进行操作,元素实际值会改变
for(v::iterator i=v.begin();i!=v.end();i++) cout<<*i;
  • 自动类型推导定义的迭代器
vector<int>v(10);
for(auto i=v.begin();i!=v.end();i++) cin>>*i;
for(auto i=v.begin();i!=v.end();i++) cout<<*i;
  • 基于范围的for循环
vector<int>v(10);
for(auto &i:v){cin>>i;
}
for(auto i:v){cout<<i;
}
  • 基于范围的for循环(C数组)
int a[10];
for(auto &i:a){cin>>i;
}
for(auto i:a){cout<<i;
}

一维vector的逆序输入、逆序输出

  • 手动定义迭代器
vector<int>v(10);
for(v::iterator i=v.rbegin();i!=v.rend();i++)cin>>*i;//注意必须解引用迭代器,否则会报错。对迭代器指向的元素进行操作,元素实际值会改变
for(v::iterator i=v.rbegin();i!=v.rend();i++) cout<<*i;
  • 自动类型推导定义的迭代器
vector<int>v(10);
for(auto i=v.rbegin();i!=v.rend();i++) cin>>*i;
for(auto i=v.rbegin();i!=v.rend();i++) cout<<*i;

二维vector的正序输入、正序输出

  • 手动定义迭代器
vector<vector<int>>v(3,vector<int>(3));
for(vector<vector<int>>::iterator j=v.begin();j!=v.end();j++)for(vector<int>::iterator i=j->begin();i!=j->end();i++)cin>>*i;
for(vector<vector<int>>::iterator j=v.begin();j!=v.end();j++)for(vector<int>::iterator i=j->begin();i!=j->end();i++)cout<<*i;
  • 自动类型推导的迭代器
vector<vector<int>>v(3,vector<int>(3));
for(auto j=v.begin();j!=v.end();j++)for(auto i=j->begin();i!=j->end();i++)cin>>*i;
vector<vector<int>>v(3,vector<int>(3));
for(auto j=v.begin();j!=v.end();j++)for(auto i=j->begin();i!=j->end();i++)cout<<*i;
  • 基于范围的for循环
vector<vector<int>>v(3,vector<int>(3));
for(auto &j:v)for(auto &i:j)cin>>i;
for(auto j:v)for(auto i:v)cout<<i;
  • 基于范围的for循环(C数组)
int a[3][3];
for(auto &j:a)for(auto &i:j)cin>>i;
for(auto &j:a)for(auto i:j)cout<<i;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361670.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter TIM 项目实现

目录 1. 服务端API 1.1 生成签名 1.1.1 步骤 第一步:获取签名算法 第二步:查看函数输入输出 第三步:nodejs 实现功能 1.1.2 验证签名 小结 1.2 Rest API 调用 1.2.1 签名介绍 1.2.2 腾讯接口 生成管理员 administrator 签名 包装一个 post 请求函数 查询账号 …

新需求:如何实现一个ShardingSphere分库分表平台

大家好&#xff0c;目前我们正面对一个既具挑战又令人兴奋的任务——构建一套高效、稳定的数据处理系统&#xff0c;特别是一个结合了SpringBoot、ShardingSphere、MyBatisPlus和MySQL技术的综合数据分库分表平台。简单来说&#xff0c;我们要做的就是打造一个能轻松应对大数据…

MMDetection训练自己的数据集coco格式

参考 ​​MMDetection 目标检测 —— 环境搭建和基础使用-CSDN博客 利用labelme制作自己的coco数据集(labelme转coco数据集&#xff09;-CSDN博客 1.下载mmdetection 克隆mmdetection到本地 git clone https://github.com/open-mmlab/mmdetection.git 如果git clone下载的…

【Qt】学习Day1

文章目录 Qt简介创建第一个Qt程序创建过程介绍main函数工程文件头文件控件源文件快捷键按钮控件常用API对象树坐标系 信号和槽自定义信号自定义槽函数触发自定义的信号案例-下课后&#xff0c;老师触发饿了信号&#xff0c;学生响应信号&#xff0c;请客吃饭重载信号连接信号La…

【目标检测】Yolov8 完整教程 | 检测 | 计算机视觉

学习资源&#xff1a;https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、准备图片images 收集数据网站&#xff1a;OPEN IMAGES 2、准备标签labels 网站&#xff1a;CVAT 有点是&#xff1a;支持直接导出yolo格式的标…

PHP师生荣誉管理系统-计算机毕业设计源码10079

目 录 摘要 1 绪论 1.1 研究背景 1.2论文结构与章节安排 2 师生荣誉管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

AI新热点:边云协同:大模型结合小模型(大小模型联合推理)

背景 AI模型规模不断剧增已是不争的事实。模型参数增长至百亿、千亿、万亿甚至十万亿&#xff0c;大模型在算力推动下演变为人工智能领域一场新的“军备竞赛”。 这种竞赛很大程度推动了人工智能的发展&#xff0c;但随之而来的能耗和端侧部署问题限制了大模型应用落地。2022…

离线安装docker-v26.1.4,compose-v2.27.0

目录 ​编辑 1.我给大家准备好了提取即可 2.安装docker和compose 3.解压 4.切换目录 5.执行脚本 6.卸载docker和compose 7.执行命令 “如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历&#xff0c;…

windows10/win11截图快捷键 和 剪贴板历史记录 快捷键

后知后觉的我今天又学了两招&#xff1a; windows10/win11截图快捷键 按 Windows 徽标键‌ Shift S。 选择屏幕截图的区域时&#xff0c;桌面将变暗。 默认情况下&#xff0c;选择“矩形模式”。 可以通过在工具栏中选择以下选项之一来更改截图的形状&#xff1a;“矩形模式”…

计算机组成原理笔记-第1章 计算机系统概论

第一章 计算机系统概论 笔记PDF版本已上传至Github个人仓库&#xff1a;CourseNotes&#xff0c;欢迎fork和star&#xff0c;拥抱开源&#xff0c;一起完善。 该笔记是最初是没打算发网上的&#xff0c;所以很多地方都为了自我阅读方便&#xff0c;我理解了的地方就少有解释&a…

【UE5.3】笔记4-自定义材质蓝图

正常来说&#xff0c;我们都是拿到什么材质用什么材质&#xff0c;那么我们如何去创建自定义的材质呢&#xff1f; 首先&#xff0c;创建MyMaterials文件夹用来存放我们自制的材质&#xff1b; 然后&#xff0c;右键创建一个材质&#xff0c;起个名字&#xff0c;双击打开&am…

springcould-config git源情况下报错app仓库找不到

在使用spring config server服务的时候发现在启动之后的一段时间内控制台会抛出异常&#xff0c;spring admin监控爆红&#xff0c;控制台信息如下 --2024-06-26 20:38:59.615 - WARN 2944 --- [oundedElastic-7] o.s.c.c.s.e.JGitEnvironmentRepository : Error occured …

onlyoffice官方文档中打开文件示例的相关测试

文档地址&#xff1a;https://api.onlyoffice.com/zh/editors/open 开发环境&#xff1a; 后端&#xff1a;zdppy_api开发的一个文档服务前端&#xff1a;vue3开发的客户端 我们在index.html中&#xff0c;引入了文档服务的js文件&#xff1a; <!doctype html> <h…

【新闻】全球热钱,正在流入新加坡 这个夏天有点猛,油价看涨? 普华永道已丢了六成“A股大客户”

新加坡成为全球投资焦点&#xff0c;吸引大量并购活动。预计经济增长2.4%&#xff0c;股指上涨8%。未来可期待更多国际投资涌入。 近期&#xff0c;新加坡成为全球投资者的焦点&#xff0c;吸引了大量的并购和投资活动。 据报道&#xff0c;2024年第二季度&#xff0c;新加坡…

C++ Vector的模拟实现

vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而…

使用c++栈刷题时踩坑的小白错误

根据图片中提供的代码&#xff0c;可以发现以下三处错误&#xff1a; 错误原因&#xff1a;条件判断语句的逻辑错误。 代码行&#xff1a;if (res.top() ! e || res.empty())&#xff08;第7行&#xff09; 问题&#xff1a;如果 res 为空&#xff08;res.empty() 为 true&…

java的字节符输出流基类、File Writer类和Buffered Writer类

一、字节符输出流基类&#xff1a;Writer 1.属于抽象类 2.常用方法 二、字节符输出流Flie Writer类 1.是writer类的子类 2.以字符为数据处理单元向文本文件中写数据 3.示例 4.实现步骤 三、BufferedWriter类 1.是Writer类的子类。 2.带有缓冲区 默认情况下&#xff0c…

线性代数基础概念:矩阵

目录 线性代数基础概念&#xff1a;矩阵 1. 矩阵的定义 2. 矩阵的运算 3. 矩阵的特殊类型 4. 矩阵的秩 5. 矩阵的初等变换 6. 矩阵的特征值与特征向量 7. 矩阵的应用 8. 矩阵总结 总结 线性代数基础概念&#xff1a;矩阵 矩阵是线性代数中的另一个重要概念&#xff0…

【原创】springboot+mysql海鲜商城设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…