# STLofC **Repository Path**: Mamiyahasaki/STLofC ## Basic Information - **Project Name**: STLofC - **Description**: 本工程用C语言实现了C++的部分STL容器,如Vector容器,这些STL容器被计划用于ARM嵌入式系统等需要用C语言的情形。 本代码按照C99标准编译,目前已实现Vector类和Buffer类 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2021-11-27 - **Last Updated**: 2026-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # STLofC 本工程用C语言实现了C++的部分STL容器,这些STL容器被计划用于ARM嵌入式系统等需要用C语言的情形。 作者: 间宫羽咲sama 工程创建时间: 2021/11/24 ### 版本V0.0 只有Vector类的定义,构造函数,析构函数 ### 版本V0.1 增加了ReSize方法,Util类,CMake工程 ### 版本V0.2 将Vector架构修改为了存内容本身而非指针;修复了VecResize的bug;增加了LogConfig功能;增加了Vector的显示函数 ### 版本V0.3 新增了ASSERT_THIS_NOT_NULL和ASSERT_MALLOC_NOT_NULL宏,用于检查this指针/malloc结果是否为空。 将原来的ReSize方法更名为ReCapa方法,写了新的ReSize方法,并修复了旧方法可能产生malloc(0)这种UB的bug。 增加了VecGetN宏和VecHandleAll函数,VecHandleAll的参数为函数指针,效率可能较低,建议手动展开。 ### 版本V0.4 Vector类完工,功能如下—— ```cpp /** -- final editor: Hasaki at 2021/11/27 * 我们约定typesize代表sizeof(type),_type代表容器里存的数据类型 * _this代表被操作对象的this指针,size代表已用空间,capa代表最大容量 * Vector类相关的接口函数如下—— * VecCreate(typesize, size, capa); // Vector的构造函数 * VecDelete(_this); // Vector的析构函数 * VecReCapa(_this, newCapa); // 将Vector的最大容量capa重置为newCapa,会分配一段新的空间 * VecReSize(_this, newSize); // 将Vector的已用空间size重置为newSize,如果newSize <= capa,不会分配新的空间 * VecHandleAll(_this, handle); // 对于Vector内的元素都执行函数handle * VecPush(_this, elem); // 往Vector的end处push back一个elem指向的内容 * VecPushSlice(_this, elemBeg, elemEnd); // 往Vector的end处push back一个[elemBeg, elemEnd)的内容 * VecDelN(_this, _N); // 将Vector的[size - N, size)的元素置0,并size减少N * VecGetSize(_this); // 返回Vector的已用空间 * BufGetCapa(_this); // 返回Vector的容量 * BufDispMsg(_this); // 显示自己的size, capacity, typesize */ ``` ### 版本V0.5 放弃GitHub,把格式转成了码云的格式 ### 版本V0.6 新增了Buffer类,修复了HskPower2Ceil函数的bug,修复了VecPush的bug,目前Vector类的内容有 ```cpp /** -- final editor: Hasaki at 2021/11/28 * 我们约定typesize代表sizeof(type),_type代表容器里存的数据类型 * _this代表被操作对象的this指针,size代表已用空间,capa代表最大容量 * Buffer类相关的接口函数如下—— * BufCreate(typesize, size, capa); // Buffer的构造函数 * BufDelete(_this); // Buffer的析构函数 * BufReCapa(_this, newCapa); // 将Buffer的最大容量capa重置为newCapa,会分配一段新的空间 * BufReSize(_this); // 清理已读空间Buffer的已读空间 * BufHandleAll(_this, handle); // 对于Buffer内的元素都执行函数handle * BufPush(_this, val); // 往Buffer的end处push back一个字符val * BufPushSlice(_this, elemBeg, elemEnd); // 往Buffer的end处push back一个[elemBeg, elemEnd)的内容 * BufDelN(_this, _N); // 将Buffer的[size - N, size)的元素置0,并size减少N * BufGetUnreadSize(_this); // 返回Buffer的未读空间 * BufGetSize(_this); // 返回Buffer的已用空间 * BufGetCapa(_this); // 返回Buffer的容量 * BufDispMsg(_this); // 显示自己的unreadSize, capacity, typesize * BufDispAllChar(_this); // 逐字符显示整个Buffer从beg到end的全部字符 * BufDispAllInt(_this); // 逐字符以int格式显示整个Buffer从beg到end的全部字符的值 */ ``` ### 版本V0.7 将原来Vector的VecGetN函数从宏函数改为了普通函数,更名为VecGet,并增添了参数检查功能。修复了BufPushSlice函数的一个bug。修复了BufReSize函数的一个bug,新增了BufGet函数和BufUnreadGet函数。 ### 版本V0.8 对HandleAll方法进行了调整,使得该方法不支持对于size和capacity改动,并对意外改动的情形进行了检测与警告。补充了对DelN方法的警告函数。将原来的Delete函数更名为Clean函数,只释放资源,新的Delete函数释放资源的同时还将Vector或Buffer的指针置为NULL。 在main函数里补充了相关的测试样例。 ### 版本V0.9 将Cmake `include` 的方式从绝对路径变成了相对路径。