Skip to content

本人实现的一个简单的C++标准模板库,主要包括iterator、vector、list、deque和unordered_map五部分组成,包括相应的单元测试模块。

Notifications You must be signed in to change notification settings

Lv-Yinghao/MySTL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MyTinySTL

简介

基于 C++11tinySTL,这是我的第二个项目,本项目参考了github上的一些优秀的开源项目,同时也参考了侯捷老师的《STL源码剖析》,书中的一些实例让我对C++标准库有了更深层次的了解。

​ 本项目选择了vector、list、deque和unordered_map五类常用容器进行实现,同时可以搭配迭代器进行使用,后面对标准库的容器和算法编写了单元测试用例,其中用宏定义封装了很多测试过程,这也是我第一次自己使用C++编写测试框架,无论是从容器实现还是测试,这个项目都带给我很大的收获。

项目难点

本项目主要分为两部分,一部分为迭代器和STL容器的实现,另一部分是每个容器的单元测试。

第一部分的需要了解容器内部的底层机制并且细节比较多,其中迭代器的实现花费时间和精力最多。

第二部分,测试经历了多次迭代,一开始通过打印输出,后面专门设计了一个测试框架:

测试用例类: 成功数 失败数 执行结果 测试名称 run函数:纯虚函数,根据容器不同自定义不同的执行方式

单元测试类:(采用单例模式实现) 当前测试用例 测试通过数 测试失败数 测试用例集合 run函数:用于执行所有case并汇总结果

首先将所有的testcase加到单元测试中,然后调用示例的run方法,将所有的case执行一遍,最后输出测试结果。 测试数据以int为主,具体数值使用rand()随机初始化,使用stl容器和自己容器结果对比,根据结果不同设置大量的断言。

性能测试采用C语言库clock函数进行计时,插入数据随机生成,结果转化后输出,整体性能与STL标准模板库相差不大。

运行

  • 使用 VS 打开

    1. 克隆仓库
    2. 使用 vs2015打开 MSVC/MyTinySTL_VS2015.sln,配置成 Release 模式后,直接开始执行。

测试计划

本次测试分为迭代器和容器两部分,其中迭代器的测试放在四个不同容器下,针对四个不同容器的不同类别的方法展开测试。下面是具体的测试用例的编写:

迭代器:

迭代器

序列式容器

vector: vector是一个经典的基于动态数组的数据结构,测试时要特别注意容器扩容和迭代器失效的问题。

vector

deque: deque是一个典型的双端队列,针对其测试用例的设计相比vector会有pop_front和push_front两个首部元素的增删方法。

deque

list: list底层结构是一个链表,其测试用例的设计和deque相差并不大,所以在STL中会多一些链表的操作方法,比如链表和并,链表去重和链表排序等。

list

关联式容器

unordered_map: unordered_map的底层是哈希表,使用拉链法解决哈希冲突的问题,在元素数量超过哈希桶时,会选择一块新接近于原内存两倍的的内存重新哈希,其有一些独特的方法,实现起来和序列式容器略有不同。

unordered_map

测试结果展示

vector: vector测试结果

deque: deque

list: list测试结果

unordered_map: unordered_map

About

本人实现的一个简单的C++标准模板库,主要包括iterator、vector、list、deque和unordered_map五部分组成,包括相应的单元测试模块。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published