C++ STL 详解:从零实现 vector 容器
vector 是 C++ 标准库中最常用的序列容器,其底层基于动态数组。要模拟实现一个 robust 的 vector,核心在于内存管理、指针追踪以及接口设计的合理性。
一、vector 模拟实现的四个关键点
- 类模板设计:vector 本质是类模板,声明与定义需在一起,避免分离导致的链接错误。
- 三指针管理:使用
_start(起始)、_finish(有效末尾)、_end_of_storage(存储末尾)三个指针,灵活计算 size 和 capacity。 - 默认初始化:成员变量可设缺省值(如 nullptr),简化构造函数逻辑。
- 深拷贝机制:自定义类型需通过赋值运算符重载实现深拷贝,而非简单的 memcpy。

二、默认成员函数
无参构造
直接初始化三个指针为空,确保对象处于空状态。
namespace dh {
template<typename T>
class vector {
public:
vector() : _start(nullptr), _finish(nullptr), _end_of_storage(nullptr) {}
private:
iterator _start;
iterator _finish;
iterator _end_of_storage;
};
}
析构函数
释放堆上内存并重置指针,防止悬空指针。
~vector() {
if (_start) {
delete[] _start;
_start = _finish = _end_of_storage = nullptr;
}
}
赋值运算符
利用 swap 实现自我赋值安全及高效交换。
vector<T>& operator=(vector<T> v) {
swap(v);
return *this;
}
三、迭代器相关函数
迭代器在 vector 中通常定义为 T*。需提供普通迭代器和 const 迭代器以支持读写权限控制。


