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

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

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

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

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

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

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

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

相关推荐
王老师青少年编程9 分钟前
csp信奥赛C++之约数研究
数据结构·c++·数学·算法·csp·信奥赛·约数研究
Eternity∞11 分钟前
数据结构基础
c语言·开发语言·数据结构·学习·vim
小老鼠不吃猫22 分钟前
Qt C++稳定职业规划
开发语言·c++·qt
qq_4017004124 分钟前
嵌入式C语言设计模式
c语言·开发语言·设计模式
㓗冽38 分钟前
纯粹合数(字符串)-基础题100th + 找出质数(字符串)-基础题101th + 翻译字符串(字符串)-基础题102th
数据结构·c++
“αβ”43 分钟前
MySQL数据类型
c语言·数据库·opencv·mysql·数据挖掘·数据类型·数据
二年级程序员1 小时前
一篇文章掌握“树”(上)
c语言·数据结构·算法
轩情吖1 小时前
Qt的文件
开发语言·c++·qt·文件·qfileinfo·桌面级开发·qt文件操作
安全不再安全1 小时前
某驱动任意读漏洞分析 - 可用于游戏内存数据读取
c语言·测试工具·安全·游戏·网络安全
一叶之秋14121 小时前
千面之法: 释放 C++ 多态的灵活威力
开发语言·c++