C++迭代器使用错误总结
指针和迭代器的区别:
迭代器:
(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作;
(2)迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。
(3)在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。
(4)在用迭代器执行erase,insert等函数时,迭代器的指针会被释放掉,从而不能继续使用,如果继续使用,则会报错;
指针:
指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能用于某些特定的容器;迭代器是指针的抽象和泛化。所以,指针满足迭代器的一切要求。
总之,指针和迭代器是有很大差别的,虽然他们表现的行为相似,但是本质是不一样的!一个是类模板,一个是存放一个家伙的地址的指针变量。
C++迭代器使用错误总结相关推荐
- 完全理解Python迭代对象、迭代器、生成器
本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网 ...
- 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器
目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...
- python3 内置函数map 返回的迭代器转为列表
python3 内置函数map 返回的是迭代器,python2 返回的才是列表, 在python3中想要使用需要把迭代器在转换成列表 list_a = [1, 2, 3, 4, 5]def add(n ...
- 生成器、迭代器的区别?
迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string.list. dict.tuple 等这类容器对象,使用 for 循环遍历是很方便的. ...
- python基础(迭代器,生成器,装饰器)
python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- Python 列表和迭代器区别
列表不论遍历多少次,表头位置始终是第一个元素: 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置. 通过 type 关键字可以看到列表和迭代器的类型是不同的. In [1]: a ...
- Python 高阶函数filter、map、reduce、reversed、sorted及迭代器函数 iter
1. filter(function, iterable) 过滤器,过滤掉不满足函数 function 的元素,重新返回一个新的迭代器. 其中 function 函数的第一个参数是可迭代对象 iter ...
- iter迭代器的应用
迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 用户不用关心迭代器的内部结构,仅需通过next方法不断去读取下一个内容 不能随机访问任意一个内容,只 ...
最新文章
- 我输给了一个 25 岁的男人
- 个人计算机中的cache,cache在计算机中的作用是什么?
- 使用 Firefox攻击Web2.0应用(二)
- windows下expdp自动备份脚本
- 支付宝和微信的支付流程图
- LeetCode 64最小路径和65有效数字66加一
- Linux上的Systemctl命令
- (小费马定理降幂)Sum
- 豪气十足!联想Z6 Pro法拉利定制版本首现
- python统计excel_Python操作excel做些统计
- POP3启用LDAP实现自动加载邮件通讯录的过程
- Unmapped Spring configuration files found.
- 十五、方差分析--使用Python进行单因素方差分析(ANOVA)
- 阿里云企业邮箱2019
- Qt之GIF录制工具
- 分布式存储技术及应用
- java创建万年历,维护节假日信息
- Mysql 知行必会 “子查询”
- 用java实现评委打分系统程序
- CentOS 7 安装 Oracle 11.2.0.4
热门文章
- 血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息
- WPF中通过AForge实现USB摄像头拍照
- Unity——用UnityEditor拷贝FBX中的AnimationClip
- 玩转MySQL之Linux下的简单操作(服务启动与关闭、启动与关闭、查看版本)
- 无线智能路由器家长控制宽带
- python闭包的应用场景_简单谈谈Python中的闭包
- 编译打包vue_Vue 源码分析( 一 )
- 波纹扩散_C4D_动画amp;RS波纹扩散效果J_014
- idea在分屏拖不回来_朋友圈赏花晒照新玩法,宫格分屏视频!
- vscode自动格式化不符合eslint_VsCode(Visual Studio Code)格式化代码符合EsLint