stl源码剖析迭代器学习笔记

Vector是分段连续的。vector整体上连续的一块空间,然后它会动态增长,实际上它的增长不是真正的增长,而是到内存空间不够的时候,重新分配一块更大的内存他分配更大空间的内存的。规律是两倍增长,这和go语言里边的不一样,在go语言里边。经常是1.25倍的增长。

在学习stl的源码分析的时候,收获很大的一点就是它是由6个部部件组成的,分别是容器,算法,迭代器,适配器,分配器以及仿函数组成的。其中迭代器是算法和容器之间的连接的纽带。

对于分配器Gcc实现的方法是使用了内存池的机制,所谓内存池的机制就是指对于小于一个区间的内存申请,直接在池上进行分配,对于一个大于一个区间的内存申请,它就是直接调用c语言的malloc函数,也就是申请空间,其实也是去malloc,他帮我们封装了malloc的操作,而且一次申请一批,这样就接上了操作。

关于迭代器,迭代器本质上也是一个模板它是模板类,我们可以根据对应的参数类型来去匹配相应的容器。也就是说迭代器和容器要配合,所以说迭代器的设计者一般也是容器本身的设计者。

标准库的迭代器的设计者要满足一定的标准才能够去被使用,才能够融入这个家庭,比如说有型别类型的观念,就是比如说迭代器要负责告诉其他使用迭代器的人,我的迭代器所指的元素的类型是什么?所指的元素类型的指针的类型是什么?还有以及指针的操作是否可以直接加n或者是只能一个一个的移动,像链表一样。

在关于匹配指针操作的时候,使用了函数的类型推断的机制,这个机制最开始是为了函数重载,但是实际上这里也是为了函数重载,只不过对于不同的指针有不同的操作而进行选择,因为我们实际上是没有区分的类型的,他主动设计了一些类型,然后利用这些类型去调相应的指针操作,比如说对于连续的存储空间,比如说vector它的指针操作就是可以随机加n,但是对于其他的,比如说对于可能就是它只能双向的移动,而且只能一个一个的移动。

迭代器就好像是封装了一下指针,有点儿类似于raii的操作,但是又不完全一样。

相关推荐
汉克老师2 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6662 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
风合星语4 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
91刘仁德4 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
码行山野赴时序归途4 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
库玛西5 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研
别动我齐刘海5 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
0+1115 小时前
算法 --滑动窗口
c++·算法·leetcode
stolentime5 小时前
(有原题)CSP-S2026第一轮试题(附答案解析、markdown源码)
c++·csp
m0_734571765 小时前
深入理解C++ RAII
开发语言·c++