概述
文章目录
- 源码信息及目录
- 启动项目
- 迭代器
- 分配器
- 算法
- 容器实现
- 测试框架Test
源码信息及目录
MyTinySTL-项目地址,该项目实现了C++的stl库,阅读该项目可以使我们对stl的底层有更深入的认识,同时可以增强我们的c++的内功。
MyTinySTL:主要实现stl的部分,包含迭代器iterator,分配器allocator,各种容器vector,list,map…,算法algorithms等。stl代码主要实现在MyTinySTL文件夹中
Test:主要涉及测试框架,用于测试各个容器以及算法的性能,整套代码的主函数main位于test.cpp中。作为项目的入口。
启动项目
项目采用Cmake编译启动运行,保证自己安装Cmake工具。
- CMakeLists.txt的文件如下:涉及cmake编译的版本要求,项目名称,编译器的选择以及版本要求,以及编译子目录${PROJECT_SOURCE_DIR}/Test。
- 编译步骤:
1.mkdir build
2.cd build
3. cmake …
4. make
5.cd bin/
6. ./stltest
即可看到输出窗口:
迭代器
- 五种迭代器类型:
- 萃取迭代器的特性:在下面的template中,Iterator代表迭代器类型,有了它我们可以撰写"运用迭代器种类或其他元素类型”的泛型码。
- 萃取某个迭代器的 value_type
- 萃取某个迭代器的 category种类
- distance的实现,可以看出input_iterator_tag和random_access_iterator_tag类型的迭代器计算迭代器之间的distance实现实不同的,ransom是可以直接相减的,
- advance用于让迭代器前进N个距离
- 反向迭代器类的实现:可以看出,其内部有一个正向迭代器iterator成员current,运算符operator重载实现迭代器的移动。
分配器
Allocator提供一份接口,可满足分配,生成,销毁和回收对象,位于allocation.h以及construct.h两个文件共同实现。
- 模板类allocator的定义
- 分配一个数据的内存以及n个数据的内存实现:
- 将ptr所指的元素初始化为value,传进来的value可能为左值或者右值
此处会判断类型有没有默认析构,如果是默认析构,什么都不做,否则会先进行析构。
算法
algobase.h,algo.h包含了大量的算法,可以查找自己想了解容器某个实现的算法。
容器实现
此处将vector容器拿出来讲解。
- vector涉及的成员:begin_,end_,cap_
- vector的迭代器本质上就是指
- 构造、复制、移动、析构函数
注意拷贝构造在实现的时候,会判断该类型是不是实现默认拷贝
- 迭代器接口实现,容量接口略类似:
- 获取元素的接口的实现:
- 操作符重载实现:
测试框架Test
测试框架是检验整个代码的接口以及性能测试,定义了两个类 TestCase 和 UnitTest,以及一系列用于测试的宏
以vector测试文件为例:
最后
以上就是俊逸外套为你收集整理的MyTinyStl源码刨析源码信息及目录启动项目迭代器分配器算法容器实现测试框架Test的全部内容,希望文章能够帮你解决MyTinyStl源码刨析源码信息及目录启动项目迭代器分配器算法容器实现测试框架Test所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复