Skip to content

stl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini version

Notifications You must be signed in to change notification settings

SugarSugarSugar-JohnLennon/MyMiniSTL

Repository files navigation

MyMiniSTL

一个完全独立实现的 STL 库,不依赖标准库,专注于核心容器和算法的实现。

🎯 项目目标

  • 深入理解 STL 的设计思想和实现原理
  • 提供轻量级的 STL 替代方案
  • 学习现代 C++ 编程技巧和最佳实践
  • 为嵌入式或特殊环境提供 STL 功能

🏗️ 架构设计

核心设计原则

  1. 零依赖:完全独立实现,不依赖标准库
  2. STL 兼容:接口设计与 STL 保持一致
  3. 内存安全:严格的内存管理和异常安全保证
  4. 性能优先:优化的算法实现和内存布局
  5. 可扩展性:模块化设计,易于扩展新功能

命名空间

所有组件都在 sugar 命名空间下,避免与标准库冲突。

📦 已实现组件

1. 类型特征 (type_traits.h)

设计亮点:

  • 完整的类型特征系统,支持编译时类型判断
  • 使用 SFINAE 技术实现类型推导
  • 支持自定义类型特征扩展

核心功能:

// 基础类型判断
is_integral<T>      // 整数类型判断
is_floating_point<T> // 浮点类型判断
is_pointer<T>       // 指针类型判断
is_reference<T>     // 引用类型判断

// 类型转换
remove_reference<T>  // 移除引用
add_pointer<T>       // 添加指针
decay<T>            // 类型衰减

// 条件类型
conditional<B, T, F> // 条件类型选择
enable_if<B, T>      // 条件启用类型

2. 异常定义 (exceptdef.h)

设计亮点:

  • 统一的异常处理机制
  • 条件编译支持,可禁用异常
  • 自定义异常类型,提供详细错误信息

核心功能:

// 异常宏
SUGAR_THROW_BAD_ALLOC_IF(condition, message)
SUGAR_THROW_LENGTH_ERROR_IF(condition, message)
SUGAR_CONDITION_CHECK(condition, message)

// 异常类型
bad_alloc          // 内存分配失败
length_error       // 长度错误
out_of_range       // 越界访问

3. 工具函数 (utility.h)

设计亮点:

  • 完美转发实现
  • 移动语义支持
  • 类型安全的交换操作

核心功能:

// 完美转发
forward<T>(t)      // 完美转发
move(t)            // 移动语义

// 类型操作
swap(a, b)         // 类型安全交换
pair<T1, T2>       // 键值对容器
make_pair(t1, t2)  // 创建键值对

4. 内存分配器 (allocator.h)

设计亮点:

  • 分层分配器架构
  • 内存池优化小对象分配
  • 支持自定义分配策略
  • 异常安全的内存管理

核心功能:

// 基础分配器
allocator<T>       // 通用分配器
pool_allocator<T>  // 内存池分配器

// 分配器特征
allocator_traits<Alloc> // 分配器特征萃取

// 内存操作
allocate(size)     // 内存分配
deallocate(ptr)    // 内存释放
construct(ptr, args) // 对象构造
destroy(ptr)       // 对象析构

5. 迭代器 (iterator.h)

设计亮点:

  • 完整的迭代器概念体系
  • 迭代器特征萃取
  • 迭代器适配器支持
  • 类型安全的迭代器操作

核心功能:

// 迭代器标签
input_iterator_tag
output_iterator_tag
forward_iterator_tag
bidirectional_iterator_tag
random_access_iterator_tag

// 迭代器特征
iterator_traits<Iter> // 迭代器特征萃取

// 迭代器适配器
reverse_iterator<Iter> // 反向迭代器

// 迭代器操作
advance(it, n)     // 迭代器前进
distance(first, last) // 计算距离

6. 算法 (algorithm.h)

设计亮点:

  • 通用算法设计,支持自定义比较器
  • 迭代器抽象,支持不同容器
  • 优化的算法实现

核心功能:

// 查找算法
find(first, last, value)
find_if(first, last, pred)

// 比较算法
equal(first1, last1, first2)
lexicographical_compare(first1, last1, first2, last2)

// 排序算法
sort(first, last)
sort(first, last, comp)

// 其他算法
copy(first, last, result)
fill(first, last, value)
swap_ranges(first1, last1, first2)

7. 函数对象 (functional.h)

设计亮点:

  • 函数对象适配器
  • 支持函数指针、成员函数、lambda
  • 类型安全的函数调用

核心功能:

// 比较函数对象
less<T>()
greater<T>()
equal_to<T>()

// 逻辑函数对象
logical_and<T>()
logical_or<T>()
logical_not<T>()

// 算术函数对象
plus<T>()
minus<T>()
multiplies<T>()
divides<T>()

8. 向量容器 (vector.h)

设计亮点:

  • 动态扩容机制,支持自定义扩容策略
  • 异常安全保证,强异常安全保证
  • 内存布局优化,减少内存碎片
  • 支持移动语义,提高性能

核心功能:

// 构造和赋值
vector<T>()                    // 默认构造
vector<T>(size, value)         // 指定大小构造
vector<T>(first, last)         // 迭代器范围构造
vector<T>(initializer_list)    // 初始化列表构造

// 元素访问
at(index)                      // 边界检查访问
operator[](index)              // 快速访问
front() / back()               // 首尾元素访问

// 容量操作
size() / empty()               // 大小查询
capacity() / max_size()        // 容量查询
reserve(size) / shrink_to_fit() // 容量调整

// 修改器
push_back(value)               // 尾部插入
pop_back()                     // 尾部删除
insert(pos, value)             // 指定位置插入
erase(pos)                     // 指定位置删除
clear()                        // 清空容器

// 迭代器
begin() / end()                // 正向迭代器
rbegin() / rend()              // 反向迭代器

9. 链表容器 (list.h)

设计亮点:

  • 双向链表实现,支持 O(1) 头尾操作
  • 哨兵节点设计,简化边界处理
  • 高效的插入删除操作
  • 支持复杂的链表操作(merge、splice、reverse)

核心功能:

// 构造和赋值
list<T>()                      // 默认构造
list<T>(size, value)           // 指定大小构造
list<T>(first, last)           // 迭代器范围构造
list<T>(initializer_list)      // 初始化列表构造

// 元素访问
front() / back()               // 首尾元素访问

// 容量操作
size() / empty()               // 大小查询
max_size()                     // 最大容量

// 修改器
push_back(value) / push_front(value)  // 头尾插入
pop_back() / pop_front()              // 头尾删除
insert(pos, value)                    // 指定位置插入
erase(pos)                            // 指定位置删除
clear()                               // 清空容器

// 特殊操作
merge(other)                   // 合并有序链表
splice(pos, other)             // 移动整个链表
splice(pos, other, it)         // 移动单个元素
splice(pos, other, first, last) // 移动元素范围
remove(value)                  // 删除指定值
unique()                       // 删除连续重复元素
sort()                         // 排序
reverse()                      // 反转

// 迭代器
begin() / end()                // 正向迭代器
rbegin() / rend()              // 反向迭代器

🚀 使用方法

编译环境

  • C++11 或更高版本
  • CMake 3.10 或更高版本
  • 支持的操作系统:Linux、Windows、macOS

编译步骤

# 克隆项目
git clone <repository-url>
cd MyMiniSTL

# 创建构建目录
mkdir build && cd build

# 配置和编译
cmake ..
make

# 运行测试
./test/bin/test_vector
./test/bin/test_list
# ... 其他测试

基本使用示例

#include "vector.h"
#include "list.h"
#include "algorithm.h"
#include <iostream>

int main() {
    // 使用 vector
    sugar::vector<int> vec = {1, 2, 3, 4, 5};
    vec.push_back(6);
    
    // 使用算法
    sugar::sort(vec.begin(), vec.end());
    
    // 使用 list
    sugar::list<int> lst = {10, 20, 30};
    lst.push_front(0);
    
    // 遍历
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    
    return 0;
}

🧪 测试覆盖

项目包含完整的测试套件:

  • 单元测试:每个组件都有对应的测试文件
  • 功能测试:验证所有公共接口的正确性
  • 边界测试:测试边界条件和异常情况
  • 性能测试:验证大规模数据处理的性能

运行所有测试

cd build
make
# 运行所有测试
for test in test/bin/test_*; do
    echo "Running $test..."
    $test
done

🔧 设计亮点总结

1. 内存管理创新

  • 分层分配器:支持不同分配策略,从简单到复杂
  • 内存池优化:小对象使用内存池,减少内存碎片
  • 异常安全:强异常安全保证,内存泄漏防护

2. 类型系统设计

  • SFINAE 技术:编译时类型推导和条件编译
  • 类型特征:完整的类型特征系统,支持元编程
  • 完美转发:零开销的参数传递

3. 迭代器抽象

  • 概念层次:清晰的迭代器概念体系
  • 适配器模式:支持迭代器适配和转换
  • 类型安全:编译时类型检查

4. 容器设计

  • STL 兼容:完全兼容 STL 接口
  • 性能优化:针对不同使用场景的优化
  • 内存布局:优化的内存布局和访问模式

5. 算法实现

  • 通用设计:支持自定义比较器和谓词
  • 迭代器抽象:算法与容器解耦
  • 性能优化:针对不同数据规模的优化

6. 异常处理

  • 统一机制:一致的异常处理策略
  • 条件编译:可配置的异常支持
  • 错误信息:详细的错误描述和定位

📈 性能特点

  • 零开销抽象:编译时优化,运行时零开销
  • 内存效率:优化的内存布局和分配策略
  • 算法优化:针对不同数据规模的算法选择
  • 缓存友好:考虑 CPU 缓存的数据布局

🔮 未来规划

  • 实现更多容器(map、set、queue、stack)
  • 添加更多算法(搜索、排序、数值算法)
  • 支持并行算法
  • 添加内存调试工具
  • 性能基准测试套件
  • 文档和教程完善

🤝 贡献指南

欢迎贡献代码、报告问题或提出建议!

  1. Fork 项目
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

📄 许可证

本项目采用 MIT 许可证,详见 LICENSE 文件。

👨‍💻 作者

  • sugar - 项目创建者和主要维护者

MyMiniSTL - 重新定义 STL 的实现艺术 🚀stl mini version

About

stl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini versionstl mini version

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •