IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> MyTinyStl源码刨析 -> 正文阅读

[C++知识库]MyTinyStl源码刨析

源码信息及目录

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测试文件为例:在这里插入图片描述在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:30:30  更:2022-03-21 20:34:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:48:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码