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

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

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

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

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

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

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

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

相关推荐
AI的探索之旅27 分钟前
97 个 OpenCV 实例(三十七):二维码识别,一张图四个码的陷阱
c++·opencv·计算机视觉
UIU1141 小时前
P16237 [蓝桥杯 2026 省 B] 应急布线
数据结构·c++·算法·蓝桥杯
raindayinrain1 小时前
c++设计模式
开发语言·c++·设计模式
旖旎夜光1 小时前
LeetCode 315: 算右侧小于当前元素的个数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
D e re k ZH1 小时前
保序回归:从 PAVA 到可并堆的单调约束优化
c++·算法·数据挖掘·回归·kotlin
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:字典树前缀树与单词检索统计
c++·python·算法·bfs·信息学竞赛
octopus_c2 小时前
C++ 运算符重载详解 && 日期类的实现
开发语言·c++
青少儿编程课堂2 小时前
2026蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:堆排序与优先队列解析
c++·python·算法·bfs·信息学竞赛
j7~2 小时前
【C++ 面试笔记】(篇二):类与数据抽象 & STL 容器与算法
开发语言·c++·面试·stl容器和算法·类和数据抽象
Fuyo_11193 小时前
深入解析 C++ unordered_set 与 unordered_map 的核心特性与性能实战
开发语言·c++