# MyTinySTL **Repository Path**: jikehao-C/my-tiny-stl ## Basic Information - **Project Name**: MyTinySTL - **Description**: 这是一个为了深入理解C++底层机制和数据结构而独立开发的项目,手动实现了STL中的部分核心组件。项目采用CMake构建,并通过测试保证了代码质量和正确性。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-15 - **Last Updated**: 2025-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyTinySTL:一个C++标准模板库的核心实现 [![Language](https://img.shields.io/badge/Language-C%2B%2B17-blue.svg)](https://isocpp.org/) [![Build System](https://img.shields.io/badge/Build-CMake-green.svg)](https://cmake.org/) [![Testing](https://img.shields.io/badge/Testing-GoogleTest-brightgreen.svg)](https://github.com/google/googletest) [![License](https://img.shields.io/badge/License-MIT-lightgrey.svg)](https://opensource.org/licenses/MIT) ## 📖 项目简介 `MyTinySTL` 是一个为了深入理解C++底层机制、数据结构与泛型编程思想而从零开始实现的项目。本项目参考了《STL源码剖析》,手动实现了标准库中部分最核心的容器、智能指针和算法,并配备了完整的单元测试来保证代码的正确性和健壮性。 这个项目的目标不仅仅是“重新发明轮子”,更在于通过实践来探索: * STL容器的内部数据结构与实现细节。 * 泛型编程中迭代器、算法和容器如何协同工作。 * 现代C++的内存管理哲学(RAII、所有权)。 * 如何运用CMake和GoogleTest来搭建一个专业、可测试的C++工程。 --- ## ✨ 已实现功能 | 类别 | 组件 | 亮点与实现细节 | | :----------- | :------------------------------------- | :------------------------------------------------------- | | **序列容器** | `vector` | 动态扩容、迭代器失效处理、异常安全保证、移动语义优化 | | | `list` | 双向链表、哨兵节点、自定义迭代器、移动语义优化 | | **关联容器** | `map` | **基于自实现的红黑树**,保证对数时间复杂度的插入与查找 | | **智能指针** | `unique_ptr` | 独占所有权、RAII、移动语义、`=delete`禁止拷贝 | | | `shared_ptr` | **线程安全的共享所有权**,通过原子操作实现引用计数 | | **算 法** | `find` | 适用于所有输入迭代器的泛型查找算法 | | | `sort` | 基于快速排序的泛型排序算法(适用于随机访问迭代器) | | **工 具** | `pair` | 存储键值对的模板结构体 | --- ## 🚀 技术亮点 * **红黑树 (Red-Black Tree)** * 从零开始手动实现,包含完整的插入、平衡调整(左旋/右旋、颜色翻转)逻辑。 * 通过了严格的红黑树五条性质的单元测试验证。 * 作为 `MyTinySTL::map` 的底层数据结构,提供了高效的动态查找性能。 * **线程安全的 `shared_ptr`** * 设计并实现了包含**原子引用计数**的独立控制块,确保在多线程环境下的线程安全。 * 熟练运用了C++11的原子操作库 ``。 * 通过经典的 **Copy-and-Swap** Idiom 实现了异常安全且简洁的拷贝赋值运算符。 * **现代C++特性应用** * 广泛使用 C++11/17 特性,如移动语义 (`&&`, `std::move`)、`=delete` 和 `noexcept` 来提升性能和代码健壮性。 * 为 `vector` 和 `list` 实现了移动构造/赋值,以及接受初始化列表 (`std::initializer_list`) 的构造函数。 * **泛型编程与STL设计哲学** * 遵循STL的设计思想,通过**迭代器**将算法 (`find`, `sort`) 与容器 (`vector`, `list`) 解耦,实现了代码的高度复用。 * 通过模板和 `std::iterator_traits` 实现了不依赖于具体类型的通用算法。 --- ## 🔧 构建与测试 本项目使用CMake进行构建管理,并使用GoogleTest作为单元测试框架。 ### 环境依赖 * C++17 编译器 (GCC, Clang, MSVC) * CMake (版本 >= 3.10) * GoogleTest (通过`apt`安装或由CMake自动获取) ### 在Ubuntu/Debian上构建 1. **安装依赖 (推荐):** ```bash sudo apt-get update sudo apt-get install build-essential cmake libgtest-dev libgmock-dev ``` 2. **克隆仓库:** ```bash git clone https://gitee.com/jikehao-C/my-tiny-stl.git cd MyTinySTL ``` 3. **编译:** ```bash mkdir build cd build cmake .. make ``` 4. **运行测试:** ```bash # 运行所有测试 ./tests/run_tests # 或者使用 CTest ctest --verbose ``` 你将会看到所有 **28** 个测试用例全部通过! --- ## 📝 未来的工作 * 实现 `deque` (双端队列) 和 `set` 容器。 * 抽象出独立的 `allocator` (内存分配器),并为容器提供模板参数支持。 * 实现 `emplace` 系列函数,以支持在容器内就地构造对象。