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

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

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

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

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

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

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

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

相关推荐
-To be number.wan2 小时前
算法学习日记 | 模拟
c++·学习·算法
EQ-雪梨蛋花汤2 小时前
【问题反馈】JNI 开发:为什么 C++ 在 Debug 正常,Release 却返回 NaN?
开发语言·c++
王老师青少年编程2 小时前
2023信奥赛C++提高组csp-s复赛真题及题解:密码锁
c++·真题·csp·密码锁·信奥赛·csp-s·提高组
naruto_lnq2 小时前
高性能消息队列实现
开发语言·c++·算法
charlie1145141912 小时前
malloc 在多线程下为什么慢?——从原理到实测
开发语言·c++·笔记·学习·工程实践
D_evil__2 小时前
【Effective Modern C++】第四章 智能指针:18. 使用独占指针管理具备专属所有权的资源
c++
王老师青少年编程2 小时前
2023信奥赛C++提高组csp-s复赛真题及题解:消消乐
c++·真题·csp·信奥赛·消消乐·csp-s·提高组
草莓熊Lotso2 小时前
从零手搓实现 Linux 简易 Shell:内建命令 + 环境变量 + 程序替换全解析
linux·运维·服务器·数据库·c++·人工智能
进击的荆棘3 小时前
优选算法——滑动窗口
c++·算法·leetcode