如何理解c++迭代器(上)

1、如何理解迭代器?迭代器不是指针,也似乎不是string这种类型

参考:迭代器与指针的区别是? C++map迭代器的++操作是如何实现的?讨论。iterator提供了遍历STL容器里元素的方式,not-only-read,还可以修改这些元素,如赋值,这需要解引用操作返回的是元素的左值引用。

考虑pointer遍历数组和链表,前者p++,后者p=p->next,而iterator提供了抽象的统一操作iterator++。STL里的各种容器实现细节不一样(内存管理不一样,如string就有三种实现方式),如果用指针去遍历,需要像容器的实现者那样了解各种细节,访问形式也是不一致。所以迭代器提供了更直观更好用的方式 acess elements in Containers。

2、forward_list的迭代器为什么和vector的迭代器不一样?见c++ primer 5th

类比指针的算术运算,迭代器需要支持的操作?++、--、*、+n、-n、=、==、!=。forward_list的迭代器不支持+n操作,因为这提供了对元素的随机访问能力,而前向链表实现的是单链表的功能,所以不能提供。iterator迭代器的五种类型随机访问迭代器

3、如何实现一个迭代器,如果自定义了容器类型,需要完成那些工作STL自带的迭代器能访问元素?

为什么C++ STL的迭代器要嵌套在容器之中?因为容器的实现方式不一样。

自定义一个容器类,如何引入迭代器机制define iterator?具体迭代器的实现可参考《STL源码剖析》。

时间: 2024-10-13 08:14:22

如何理解c++迭代器(上)的相关文章

ADO.NET入门教程(八) 深入理解DataAdapter(上)

摘要 ADO.NET有两个核心组件:基于连接的Data Provider组件以及基于非连接的DataSet组件.基于连接的Data Provider组件常用于实时地从数据库中检索数据.而基于非连接的DataSet,似乎与数据库没有直接联系,仅仅用于在本地内存中存储Data Provider提供的数据表或集合.这一切似乎很微妙,此时,你是否在想:这两大组件是如何联系在一起的呢?或许,通过阅读本文会或多或少解除你的一些疑惑呢! 目录 认识DataAdapter DataAdapter的工作原理 说说

【底层原理】深入理解Cache (上)

存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再次是主存(普通内存),再次是本地磁盘. 寄存器的速度最快,可以在一个时钟周期内访问,其次是高速缓存,可以在几个时钟周期内访问,普通内存可以在几十个或几百个时钟周期内访问. 存储器分级,利用的是局部性原理.我们可以以经典的阅读书籍为例.我在读的书,捧在手里(寄存器),我最近频繁阅读的书,放在书桌上(缓

对cpu与load的理解及线上问题处理思路解读

前言 2019双11还有不到2个月就要到来了,大家也都知道服务器在大促期间由于流量的增加势必导致机器的cpu与load变高.因此趁着这个时机正好再好好学习.巩固一下cpu和load的概念,为双11做准备的同时也是增加自己的技能储备. 不过cpu和load这块真的还是很需要积累的,我自己经验尚浅,感觉还是有许多写的不到位与不对的地方,也是希望如果有错误,大家可以帮助指正. top命令 既然说了cpu和load,那总需要监控吧,没有监控就不知道cpu和load,后面的一切也就无从谈起了. top命令

[转]深入理解双指针(上)

转载:http://blog.csdn.net/feiyinzilgd/archive/2010/02/09/5302369.aspx  对于C语言的参数传递都是值传递,当传传递一个指针给函数的时,其实质上还是值传递,除非使用双指针. 在讲双指针之前,还是先讲讲关于C语言函数调用的本质.函 数调用操作包括从一块代码到另一块代码之间的双向数据传递和执行控制转移.数据传递通过函数参数和返回值来进行,包括局部变量的空间分配与回收,都是通过 栈来实现的.绝大多数CPU上的程序实现使用栈来支持函数调用操作

数据库三大范式个人理解,书上讲的太抽象

第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列. 个人理解:列不可分(原子性,即字段不可以再分) 地址可以再分,分成省份,城市,和详细地址 第二范式(2NF):首先是 1NF,另外包含两部分内容,一是表必须有一个主键:二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分. 个人理解:不存在部分依赖(唯一性,不可以把多种数据保存在同一张表中,即一张表只能保存"一种"数据) 表: 学号, 姓名, 年龄, 课程名称, 成绩, 学分 问题: 数据冗余,每条记

数据结构---在分内分彩平台出租存上理解链表

首先,在学习分内分彩平台出租haozbbs.comQ1446595067 数据结构中,对链表在内存上的理解非常重要,上代码public class LinkNode<M> {public M data;public LinkNode nextNode;br/>@Overridepublic String toString() {return "LinkNode [data=" + data + ", nextNode=" + nextNode +

【转】【C#】C# 迭代器

迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式.简单来说,迭代器模式使得你能够获取到序列中的所有元素而不用关心是其类型是array,list,linked list或者是其他什么序列结构.这一点使得能够非常高效的构建数据处理通道(data pipeline)--即数据能够进入处理通道,进行一系列的变换,或者过滤,然后得到结果.事实上,这正是LINQ的核心模式. 在.NET中,迭代器模式被IEnume

HashSet源码解析&amp;Map迭代器

今天的主角是HashSet,Set是什么东东,当然也是一种java容器了. 那么今天的HashSet它又是怎么一回事的,他的存在又是为了解决什么问题呢? 先来看下Set的特点:Set元素无顺序,且元素不可以重复. .想到了什么?无顺序,由于散列的缘故:不可重复,HashMap的key就是不能重复的.是的,你有想对了.HashSet就是基于HashMap的key来实现的,整个HashSet中基本所有方法都是调用的HashMap的方法.利用HashMap可以实现两个卖点:1.不可重复,2.快速查找(

这些基础知识你都了解吗?——《松本行弘的程序世界》读书笔记(上)

1. 前言 半个月之前买了这本书,还是经园子里的一位网友推荐的.到现在看了一半多,基础的都看完了,剩下的几章可做高级部分来看.这本书看到现在,可以说感触很深,必须做一次读书笔记! 关于这本书,不了解的可以去网上查查.作者是Ruby语言的创始人,可谓是程序世界中的高手,开卷有益,不管你是哪个层次的编程人员,相信都能或多或少的汲取到你想要的营养. 下面将总结一下看完本书我记录下的一些知识点.有的是书中的原话,有的是我个人的理解,供参考. 2. 面向对象 2.1 多态性 面向对象三大原则:继承.封装和