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

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

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

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

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

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

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

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

相关推荐
炸膛坦客1 分钟前
单片机/C语言八股:(十四)const 关键字的作用(和 define 比呢?)
c语言·单片机
Aawy1207 分钟前
C++中的状态模式高级应用
开发语言·c++·算法
Liu6288812 分钟前
C++中的状态模式
开发语言·c++·算法
smchaopiao13 分钟前
使用C语言打印几何图形:从三角形到菱形
c语言·开发语言·算法
我喜欢就喜欢14 分钟前
Word 模板匹配与样式同步技术详解
开发语言·c++·qt·word·模板匹配
又菜又爱编程的小白14 分钟前
L1-071 前世档案
c++·算法·天梯赛
niceffking25 分钟前
C++:initializer_list 与 {} 初始化的本质
开发语言·c++·cpp
Book思议-35 分钟前
【数据结构实战】双向链表尾插法
c语言·数据结构·链表
.select.36 分钟前
虚函数和虚表
开发语言·c++·算法
’长谷深风‘37 分钟前
51单片机入门
c语言·单片机·嵌入式硬件·51单片机