首先声明,下面的讲解都是针对GCC2.9,std::alloc

通过下面的源代码大家可以看到list类的内部成员是一个node,而他的类型是linktype,前面的typedef里面有介绍是一个指针,所以,当我们创建一个对象的时候,他的大小是4,只有一个指针,而listnode是一个结构体,void *的两个指针,因为list是一个双向链表,而且还是一个环状的,所有有两个指针

iterrator:我们如何查看list里面的元素呢,我们需要使用iterator迭代器,我们说迭代器是一个指针,那他到底是什么指针,除了vector和arrar,(因为他们两个的内存空间是连续的),其他的序列式容器的迭代器都是一个类类型的,因为list的各个元素相互·1独立,他们不能通过单存的++就可以实现地址的++进而取得元素,相反,他们内部需要进行某些处理获得下一个元素的位置,所以我们看到第二张图片(*node).mext,在++的重载函数里面,他首先获得里面的next,在跳转到下一个元素返回

前置版本返回一个引用【Fraction& operator++()】,后置版本返回一个const值【const Fraction operator ++(int)】。

后置版本是利用前置版本来实现的。节约代码,控制代码有余。

前置版本的效率高,因为后置版本需要调用前置版本,所有后置版本效率比前置要低。(++i比i++效率高。)

在后置版本里,人为添加一个参数(int),主要是为了区别前置版本,这个参数不会被使用。

他们的返回值一个是&,一个是非引用,

下满举一个例子

++++i

i++++

上面两个都执行两次++,但是前置的可以,后置的就不可以,所以,为了满足上面的这种要求,前置的要求返回引用,后置的不能返回引用,就可以解决是否可以前置后置两次++的问题了

 ***************************G4.9***********************************************

下面就是两者的主要区别list_iterator传的参数变了,省去了没有必要的引用和指针,list_node结构变了,之前point和data封装在一起,现在单独开了,

以前l2.9,空list对象4个字节,现在8个,可以看一下上面的结构,list为空。但是继承了listbase,listbase包含了listimpl,listimpl又包含了list_node_base,里面有两个指针,所以大小为8

转载于:https://www.cnblogs.com/13224ACMer/p/6389622.html

std::list 源代码解析相关推荐

  1. Spring源代码解析(收藏)

    Spring源代码解析(收藏) Spring源代码解析(一):IOC容器:http://www.iteye.com/topic/86339  Spring源代码解析(二):IoC容器在Web容器中的启 ...

  2. Android源代码解析之(四)--gt;HandlerThread

    转载请标明出处:一片枫叶的专栏 上一篇文章中我们解说了AsyncTast的基本使用以及实现原理,我们知道AsyncTask内部是通过线程池和Handler实现的.通过对线程池和handler的封装实现 ...

  3. Tomcat源代码解析系列

    学web也有一段时间了.为了从底层了解web应用在Tomcat中的执行,决定看一下Tomcat的源代码參见<How Tomcat works>    和大牛博客.对大体架构有了一定的了解, ...

  4. 【backtrader源码解析52】indicators部分代码解读(枯燥,仅供参考,源代码解析结束,后面会增加一个backtrader框架分析)

    指标类里面有很多不同的指标,如果对如何使用指标做策略感兴趣的话,可以考虑阅读下相关的源码和指标的用法,就仅仅指标的源代码而言,似乎没有什么可讲的.另外,关于backtrader源代码的注释,放到网站上 ...

  5. overlayfs源代码解析

    overlayfs源代码解析 mount挂载 注册文件系统 挂载文件系统 读写目录 openat系统调用打开目录 getdents系统调用,搜索目录 创建/删除文件 创建文件 删除文件 读写文件 读/ ...

  6. 历经一个月,终于搞定了SVM(支持向量机)-附源代码解析

    历经一个月,终于搞定了SVM(支持向量机)-附源代码解析 前言 其实整体算下来,断断续续的也得有快两个月了(原谅博主比较笨).中间也有好几次放弃,不想写这篇总结了,但是之前立下的誓言,要将学习到的每一 ...

  7. Mozilla FireFox Gecko内核源代码解析(4.nsHTMLTokens)

    之前我们分析了nsHTMLTokenizer(详见其解析篇),其中我们了解到了,其中设计了如何配合 nsScanner对输入流循环地解析流程,如怎么进行回溯等流式操作.实际上其中并没有包含具体的字符比 ...

  8. AnnaKournikova病毒源代码解析

    AnnaKournikova病毒源代码解析 AnnaKournikova病毒源代码解析 本帖版权归原作者,其它网站转载须注明出处,传统媒体转载须事先与原作者和e龙西祠胡同[http://www.xic ...

  9. php病毒源代码,HTML_vbs病毒的简单例子源代码解析,说明:作者对某些代码进行了 - phpStudy...

    vbs病毒的简单例子源代码解析 说明:作者对某些代码进行了修改.该文件是一个完整的程序.该文件执行之后,会寻找硬盘上所有满足条件的文件,对其进行强制性覆盖(满足条件的文件数据将全部丢失).并再创建一个 ...

最新文章

  1. 处理机调度的性能准则
  2. com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction
  3. 在Linux中如何查看文件的修改日期
  4. 内存的使用和优化的注意事项
  5. Node.js入门 - 回调函数
  6. 斯坦福 cs234 强化学习笔记整理活动 | ApacheCN
  7. SQL语句操作优先级顺序
  8. 【白皮书分享】直播社会价值白皮书-字节跳动.pdf(附下载链接)
  9. 插入模板_巧用Focusky模板制作精美微课
  10. 用python画玫瑰花-使用Python画一朵玫瑰花
  11. CSU Scientific Conference
  12. “熊猫烧香”源码启示录
  13. 创始人之间应该如何量化分配股权?
  14. 微信小程序 (布局适配与物理逻辑像素)
  15. 如何在Chrome浏览器下清除DNS缓存
  16. Three.js快速入门
  17. Wi-Fi显示“无Internet,安全”是怎么回事?
  18. 阿里云OCR图片识别
  19. 精确计算时,不要使用float或double
  20. 混沌映射singer map 和 logistic map分叉图

热门文章

  1. hadoop-0.20.2完全分布式集群
  2. 自写函数的防抖和节流
  3. JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别
  4. 读取swagger配置文件里的内容
  5. 2021年贵金属黄金会迎来大行情吗?
  6. 在消费中,一味的贪图价格的便宜,而忽视价值的人
  7. 现在很多人都在网上找富业
  8. 成年人的世界里,赚钱是保护自己和身边人最高效的手段
  9. OKR是什么、OKR有什么用?
  10. Qt4_子类化QTableWidgetItem