C++11中容器迭代器操作总结

C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作 关联容器的迭代器和操作 阅读详情

C++11中标准容器迭代器操作总结

       我发现有必要对各类容器迭代器的操作做一个小小的总结,本文中的内容大多来自于《C++ Primer》(第5版)中相关章节的内容。
       1.下面列出了容器迭代器支持的所有的操作(注意:forward_list迭代器不支持递减运算符(--))。
       *iter                      返回迭代器iter所指元素的引用
       iter->mem             解引用iter并获取该元素名为mem的成员,等价于(*iter).mem
       ++iter                   令iter指示容器中的下一个元素
       --iter                     令iter指示容器中的上一个元素
       iter1 == iter2        判断两个迭代器是否相等(不相等),如果两个迭代器指示的是同一个
       iter1 != iter2         元素或者它们是同一个容器的尾后迭代器,则相等;反之,不相等。
       2.下面的运算只能用于string,vector,deque和array的迭代器。不能将它们用于其他任何容器类型的迭代器!!

       iter + n                 迭代器加上一个整数值仍得到一个迭代器,迭代器指示的新位置与原来相比向前移动了若干元                                      素。结果迭代器或者指示容器内的一个元素,或者指向容器尾的下一个位置

       iter - n/iter += n/iter -=n  这三操作意思和上面差不多。。

       iter1 - iter2           两个迭代器相减的结果是它们之间的距离,参与运算的两个迭代器必须指向的是同一个容器中                                      的元素或者尾元素后的位置    

       >、>=、<、<=    迭代器的关系运算符,如果某迭代器指向的容器位置在另一个迭代器所指位置之前,则说明前                                      者小于后者。参与运算的两个迭代器必须指向的是同一个容器中的元素或者尾元素后的位置

       3.对于不同容器类型的迭代器,简单来说

       顺序容器:

       string、vector、deque和array    支持++、--、+n、-n.        

       forwar_list                                   支持++,然鹅不支持+n、-n、--.

       list                                               支持++、--,然鹅不支持+n、-n.

       关联容器:

       set、map、multiset、multimap   支持++、--,然鹅不支持+n、-n.

       unordered_set、unordered_map、unordered_multiset、unordered_multimap   支持++、--,然鹅不支持+n、-n.

       注意:本文中的单独出现的++、--符号均包含了前置后置两种情况。

C++算法竞赛入门常用知识点 阅读详情

相关推荐

Wi-Fi Sigma测试系统

Wi-Fi Sigma测试系统是Wi-Fi联盟(WFA)提出的一套全自动的WiFi认证测试系统,几乎涵盖的所有Wi-Fi的功能及性能(throughput)的自动化测试。该系统正逐步取代以前的WiFi认证测试系统。

Ke8323的博客 1万+

c++ 迭代器总结

c++ 迭代器总结

CSSDCC的博客 1853

Windows 10/11下彻底卸载Chrome的终极指南(附一键清理注册表脚本)

本文提供了一份在Windows 10/11系统中彻底卸载Google Chrome浏览器的终极指南。针对标准卸载后用户数据与注册表项残留的问题,文章详细介绍了从应用程序层、用户数据层到系统集成层的三层深度清理方法,并重点提供了安全高效的注册表清理脚本,确保浏览器所有痕迹被完全移除,解决重装冲突并释放磁盘空间。

elastic6hunter的博客 780

【STL】C++ 的五种迭代器、迭代器之间的关系、迭代器与指针的关系?

C++ 的五种迭代器,及迭代器之间的关系。 C++迭代器分为五种: 提示:这里填写问题的分析: 例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。 ## 每个迭代器类别的属性是: ![在这里插入图片描述](https://img-blog

多丰富下自己呀 1281

20 CVPR Learning 3D Semantic Scene Graphs From 3D Indoor Reconstructions 学习笔记

3RScan是大规模真实世界的室内场景,特点是对478个自然改变的室内环境在不同的时间帧进行了1482 RGB-D scans,每一个scene都包括了一些位置被改变的物体。它和ScanNet数据集的区别主要在于ScanNet中的每一个采样环境都不相同,但是3RScan中存在采样环境相同但物体的位置不同的场景。Scene Graph Annotations 则是在3RScan的基础上给物体加入了场景图需要的关系、物体特征和类别标注,同时对3RScan进行了扩展,以此形成了场景图数据。

weixin_43508459的博客 1834

团结引擎+OpenHarmony 记录 (持续更新中)

获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了。只有纯 UI 控件是可以展示出来的,注释掉 web控件后就可以。

m_cainiaokuaifei的博客 1490

C++迭代器浅析

对于STL库中常用的迭代器操作的基础分析

RXY24601的博客 1291

【学习系列】SAP RAP 8:行为定义-Authorization Control

本文介绍了SAP RAP中的授权控制实现方法,主要分为读取操作和修改操作两种场景。读取操作通过ABAP CDS的数据控制语言(DCL)实现,使用访问控制对象限制数据可见范围;修改操作则通过行为定义中的权限检查,包括全局授权、实例授权和预检查三种方式。文章详细说明了如何使用DCL创建访问控制规则,并通过实例演示了全局授权和实例授权的代码实现方法,以及预检查功能在数据更新前的权限验证。这些授权控制机制共同确保用户只能访问和操作其权限范围内的数据,有效保障系统安全性。

DeveloperMrMeng的博客 432

C++——实现一个简单的迭代器

迭代器的实现

weixin_67452474的博客 4740

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 344

STM32嵌入式标准化封装五层架构设计与工程实践

在嵌入式系统开发中,代码封装是保障可维护性、可复用性与可靠性的核心工程能力。其本质是通过分层抽象(硬件抽象层→设备驱动层→应用逻辑层)解耦硬件依赖与业务逻辑,实现跨芯片移植、多任务安全及确定性实时响应。关键技术包括HAL库重构以消除硬编码初始化、驱动层提供同步/异步/事件驱动三类UART接口、中断优先级矩阵管理确保响应确定性、双阶段时钟配置兼顾启动鲁棒性与运行能效,以及面向Modbus等工业协议的语义化API封装。这些实践直击STM32项目中引脚变更难、HAL裸调风险高、中断处理不安全、时钟配置僵化等典型痛

weixin_35019679的博客 66

C++迭代器:容器访问的统一接口

在C++11的STL设计中,迭代器是容器与算法之间的核心桥梁。

acxcr_007的博客 642

金融数字化——详解2025年金融智能体深度应用报告【附全文阅读】

《2025年金融智能体深度应用报告》显示,金融智能体已实现80%部署率,推动行业效率提升30%-50%。报告指出智能体通过"感知-推理-规划-执行-进化"机制突破大模型局限,在风控、客服、投研等100+场景实现自动化。典型案例显示,工商银行信贷审批效率提升60%,蚂蚁数科智能客服解决80%问题。尽管面临系统协同、标准缺失等挑战,未来趋势将向多模态交互、自主进化和ESG投资等方向拓展。

cdfunlove的博客 203

C++11迭代器失效问题分析

C++11迭代器失效问题分析前言顺序容器关联容器 前言 这个问题面试官最喜欢问了,咱们把它解决掉,非常简单的。 顺序容器 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用erase(iter++)的方式,还好erase方法可以返回下一个有效的iterator。 但是erase方法可以返回下一个有效的it

weixin_44039270的博客 324

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C++ STL--list容器

C++ STL--list容器介绍

积木的笔记 2037

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

list容器方法总结——中文博客最清晰完整的整理

list 注: *标记的为c++11新特性,构造函数默认为c++11 函数原型省略了一些细节,只展示实际需要填写的情况(分配器已经隐藏了,需要可以去c++reference查看) 参数栏表示传入的两个参数的意义而不是类型 返回值栏表示类型而不是意义 粉红色表示为c++11新特性 构造函数 方法(method) 原型(prototype) 参数(param) 返回值(return) 功能(function) 构造函数 explicit list (const allocator_type&

Charlesix59的博客 958

容器迭代器erase

AssociContainer <int> c;  //关联容器:mapset for(auto it=c.begin();it!=c.end();) {   if(badValue(*it))     c.erase(it++);  //关联容器set/map c++11之前版本 erase返回值为void   else     ++it; } 说明:c.erase(it++) 会把it的旧值传给erase,但在erase开始执行之前it会自增,正好符合我们的期望。关联容器这样写没有任何..

xuleisdjn的专栏 1929

STL容器浅析(c++11)-vector

STL容器浅析(c++11)-vector vector(不定长数组)——动态数组 C++官方介绍: http://www.cplusplus.com/reference/vector/vector/?kw=vector 建议直接看官方资料,全面详细。 c++11的新特性用(c++11)圈出来了 特性 ①线性储存,读元素很快,删除和增加元素可能成本较大。 ②当增加容量时,需要将整个vector搬到...

baidu_35465806的博客 426

Cpp ||关联式容器(unordered系列)

文章目录一:unordered系列关联式容器1.unordered_map介绍2.unordered_map的接口说明2.1:unoedered_map的构造2.2:unordered_map的容量2.3:unordered_map的迭代器2.4:unordered_map的元素访问2.5:unordered_map的查询2.6:unordered_map的修改操作2.7:unordered_ma...

Template Code 588

【C++】C++遍历容器时进行擦除操作

遍历容器时进行擦除(erase)操作需要特别注意迭代器失效问题。

weixin_43510208的博客 981

C++primer第五版笔记-第九章顺序容器

1.概述 #include //迭代器,包含c++11的begin() 和end()函数 #include //c++11 数组类型,长度固定,提供了更好、更安全的接口,执行效率和内置数组相同,可以有效替代内置数组 #include //c++11 值类型的数组类型,针对值类型的数组,有更多的操作,比如求和,最大最小数等。 #include

liugallup的专栏 621

C++ 迭代器【学习笔记】

迭代器 迭代器类似于指针,但是不是通过取址运算符&获得的,而是通过容器的begin()或end()成员函数返回的。begin()返回指向头元素的迭代器,end()返回指向尾元素下一位置的迭代器;所有标准库容器都可以使用迭代器。 使用迭代器遍历容器: #include <string> #include <iostream> #include <vector...

qq_36013249的博客 650

C++学习12-迭代器实现

迭代器实现迭代器概念给String字符串类型提供迭代器的实现给当前Vector容器提供迭代器的插入删除等操作 迭代器概念 迭代器就是遍历容器的元素 迭代器一般都设计为容器的嵌套类型(设计在容器里面的方法),对于外部来说,我们看不到容器的内部,但是不同容器的底层是不一样的,因为数据结构都不一样.但是每种容器的迭代方式都可以通过++it(运算符重载函数)来体现,用++it这个方式来遍历. 迭代器是一种...

sunshine612的博客 609

C++中迭代器的详细用法

迭代器非常有用,可以用于搜索、插入、删除和修改容器中的元素。它们还允许你在不暴露容器的底层实现细节的情况下访问容器中的数据。在修改容器时,要注意迭代器的失效问题。插入或删除元素可能导致迭代器失效,因此在使用迭代器之前要谨慎检查容器的有效性。这会自动遍历容器中的元素,而不需要显式使用迭代器。这会输出容器中的所有元素。

qq_73554831的博客 890

C++ STL标准库:序列容器 单向链表forward_list(C++ 11)

文章目录1. 简介2. 基本使用3. 迭代器使用4. 增加、删除、插入元素 forward_list - C++ Reference (cplusplus.com) 1. 简介 forward_list 是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过 forward_list 使用的是单链表,而 list 使用的是双向链表(如下图) forward_list(单向链表)不支持随机访问,对任何位置进行高效插入、删除的序列容器。与list容器的区别是它是单向的

超级大洋葱的博客 4488

【C++】list容器的模拟实现

本文深入解析了C++标准库中list容器的实现原理。list底层采用双向循环链表结构,通过节点指针连接实现动态存储。文章详细介绍了节点结构、哨兵位头节点设计、迭代器实现、插入/删除操作的核心指针调整逻辑,以及迭代器失效问题。特别强调了拷贝构造和赋值运算符必须实现深拷贝,避免共享节点内存。同时分析了const迭代器和operator->重载的实现技巧,并对比了传统与现代写法的差异。最后说明了C++11列表初始化的实现原理,为深入理解STL容器提供了完整的技术参考。

2302_81312180的博客 1222
上一篇: ubuntu下环境变量详解 bashrc, profile, environment
下一篇: PRML中文版(马春鹏)勘误表
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值