常州装修网站建设公司wap网站前台

张小明 2026/1/12 5:38:18
常州装修网站建设公司,wap网站前台,创意设计的英文,建设银行官方网站登录网址迭代器#xff08;Iterator#xff09;是 C STL 的核心组件之一#xff0c;本质是封装了指针行为的对象#xff0c;为不同容器提供统一的遍历接口—— 无论底层是数组#xff08;vector#xff09;、链表#xff08;list#xff09;、红黑树#xff08;map#xff09…迭代器Iterator是 C STL 的核心组件之一本质是封装了指针行为的对象为不同容器提供统一的遍历接口—— 无论底层是数组vector、链表list、红黑树map还是哈希表unordered_map都能通过迭代器以相同的方式访问元素实现了 “算法与容器解耦”。一、迭代器的核心定位迭代器的作用是连接容器和算法容器提供数据存储算法提供通用操作排序、查找等迭代器作为 “桥梁”让算法无需关心容器的底层实现只需通过迭代器访问元素。可以把迭代器理解为 “通用版的指针”支持*解引用、移动、/!比较等指针操作但适配了不同容器的内存结构。二、迭代器的基本特性特性说明遍历方向单向如forward_iterator、双向如list的迭代器、随机访问如vector的迭代器读写权限普通迭代器可读可写、常量迭代器const_iterator只读遍历范围遵循 “左闭右开” 原则begin()指向第一个元素就指向最后一个元素的下一个位置不指向有效元素三、迭代器的分类按功能强弱STL 迭代器按功能从弱到强分为 5 类不同容器支持的迭代器类型不同迭代器类型核心能力支持的操作适用容器输入迭代器Input只读单向向前移动*it、it、/!istream_iterator输出迭代器Output只写单向向前移动*it val、itostream_iterator前向迭代器Forward可读可写单向向前移动输入 输出迭代器的所有操作forward_list、unordered_set双向迭代器Bidirectional可读可写双向移动/--前向迭代器 it--list、map、set随机访问迭代器Random Access可读可写随机访问/-/[]双向迭代器 itn/it-n/it[]vector、deque、array四、迭代器的基本用法以vector为例1. 定义与初始化cpp运行#include iostream #include vector using namespace std; int main() { vectorint v {10, 20, 30, 40, 50}; // 1. 普通迭代器可读可写 vectorint::iterator it; it v.begin(); // 指向第一个元素10 // 2. 常量迭代器只读不可修改元素 vectorint::const_iterator cit v.cbegin(); // cbegin() 返回const_iterator // 3. 反向迭代器从尾到头遍历 vectorint::reverse_iterator rit v.rbegin(); // 指向最后一个元素50 return 0; }2. 遍历容器核心场景cpp运行int main() { vectorint v {10, 20, 30, 40, 50}; // 方式1普通迭代器遍历左闭右开 cout 普通迭代器遍历; for (vectorint::iterator it v.begin(); it ! v.end(); it) { cout *it ; // 解引用获取元素值 } cout endl; // 输出10 20 30 40 50 // 方式2常量迭代器遍历只读 cout 常量迭代器遍历; for (vectorint::const_iterator cit v.cbegin(); cit ! v.cend(); cit) { cout *cit ; // *cit 100; // 错误常量迭代器不可修改元素 } cout endl; // 方式3反向迭代器遍历从尾到头 cout 反向迭代器遍历; for (vectorint::reverse_iterator rit v.rbegin(); rit ! v.rend(); rit) { cout *rit ; } cout endl; // 输出50 40 30 20 10 return 0; }3. 修改元素普通迭代器cpp运行int main() { vectorint v {10, 20, 30}; vectorint::iterator it v.begin(); *it 100; // 修改第一个元素为100 it; // 迭代器后移指向第二个元素 *it 50; // 第二个元素变为205070 // 遍历验证100 70 30 for (auto x : v) cout x ; return 0; }四、不同容器的迭代器差异重点不同容器的底层结构不同导致迭代器的功能和性能差异显著容器迭代器类型核心限制vector随机访问迭代器支持itn、it[]遍历 / 随机访问快list双向迭代器不支持itn/it[]只能/--map/set双向迭代器元素只读修改需先删除再插入unordered_map前向迭代器不支持--遍历顺序无序array随机访问迭代器固定大小迭代器不可越界示例list的迭代器限制cpp运行#include list int main() { listint lst {1,2,3}; listint::iterator it lst.begin(); it; // 合法双向迭代器支持 it--; // 合法支持-- // it 2; // 错误list迭代器不支持随机访问 // cout it[0]; // 错误无[]操作 return 0; }五、迭代器的常用技巧1. 自动类型推导auto简化代码C11 后可通过auto自动推导迭代器类型避免冗长的类型声明cpp运行vectorstring months {Jan, Feb, Mar}; // auto 推导为 vectorstring::iterator for (auto it months.begin(); it ! months.end(); it) { cout *it ; }2. 迭代器与算法结合STL 核心用法算法通过迭代器操作容器无需关心容器类型cpp运行#include algorithm // sort/find 头文件 int main() { vectorint v {3,1,4,1,5}; // 排序通过迭代器指定范围 sort(v.begin(), v.end()); // v变为{1,1,3,4,5} // 查找返回指向目标元素的迭代器 auto it find(v.begin(), v.end(), 3); if (it ! v.end()) { cout 找到元素 *it endl; // 输出找到元素3 } return 0; }3. 迭代器失效问题避坑重点修改容器插入 / 删除元素可能导致迭代器失效指向非法内存需注意vector插入 / 删除元素可能导致内存重分配迭代器失效list插入元素不失效删除元素仅失效指向被删元素的迭代器map插入 / 删除元素仅失效指向被删元素的迭代器。示例vector迭代器失效修复cpp运行vectorint v {1,2,3,4}; // 错误删除元素后it 失效it 会崩溃 // for (auto it v.begin(); it ! v.end(); it) { // if (*it 2) v.erase(it); // } // 正确用 erase 返回的新迭代器更新 for (auto it v.begin(); it ! v.end();) { if (*it 2) { it v.erase(it); // erase 返回下一个有效迭代器 } else { it; } }六、迭代器的核心优势接口统一不同容器的遍历方式一致算法可复用如sort可排序vector也可排序array类型安全编译期检查迭代器类型避免原生指针的越界风险解耦设计算法与容器分离新增容器只需实现迭代器无需修改算法功能扩展支持反向迭代器、常量迭代器等适配不同场景需求。总结迭代器是 STL 的 “灵魂”核心是为不同容器提供统一的访问接口。掌握迭代器的关键理解 “左闭右开” 的遍历范围区分不同容器的迭代器类型尤其是随机访问 vs 双向 / 前向规避迭代器失效问题结合auto和算法简化代码。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建设银行网站的机构制作网站公司推荐

Ubuntu 文件安全与社区参与指南 1. 文件恢复与数字粉碎 在数据处理过程中,文件恢复和安全删除是重要的环节。如果你在恢复文件时遇到困难,可以访问 https://help.ubuntu.com/community/EncryptedPrivateDirectory/ 查看是否有更多方法可供尝试。 通常,人们删除不再需要的文…

张小明 2026/1/11 20:26:32 网站建设

网站设置的流程第一步应该joomla 1.5 网站建设基础教程

政务微信”指各级政府及其部门在官方微信公众号平台上开设的官方账号,如“xx市人民政府”“xx发布”“xx人社”这些官方公众号,用于发布官方信息、提供公共服务、与群众互动、传播政策等, 政务微信数据可用来衡量地方政府信息公开和数字治理…

张小明 2026/1/11 20:43:08 网站建设

云服务器做网站要备案吗卖网格布怎样做网站

一、新用户快速获取1TB 若从未使用过夸克网盘,可通过以下方式直接获得1TB空间: 1. 首次转存资源:通过他人分享的链接转存任意文件,系统会自动赠送1TB空间。此方法需使用手机端操作,且仅限首次转存时触发。 打开手机…

张小明 2026/1/11 20:57:46 网站建设

深圳网站建设南山延边省建设局网站官网

本周工作内容:1.12.8,搜集好照片,在数据库上完成好照片的部署。完成情况100%/工作饱和度52.12.10,下载测试工具,准备测试文档。完成情况100%/工作饱和度53.12.12,完成周报,完成情况100%/工作饱和…

张小明 2026/1/11 21:13:17 网站建设

网上建站赚钱外贸网站多语言

操作系统中的流与进程间通信技术详解 1. STREAMS 相关内容 STREAMS 是操作系统中一个重要的概念,它涉及到模块、驱动程序和多路复用器等组件。下面我们来详细探讨一些与 STREAMS 相关的问题。 1.1 STREAMS 组件差异 模块(Module) :在 STREAMS 中,模块起到对数据进行处…

张小明 2026/1/11 22:23:30 网站建设

网站结构布局电商网站对比表格

零样本声音克隆实践:用EmotiVoice复制任意音色仅需3秒音频 在数字人、虚拟主播和个性化语音助手日益普及的今天,用户早已不再满足于“能说话”的机械朗读。他们想要的是有情感、像真人、属于自己声音的语音合成体验。然而,传统TTS系统往往需要…

张小明 2026/1/11 22:39:18 网站建设