1. Vector基础概念与核心设计
在C++标准模板库(STL)中,vector是最常用的动态数组容器之一。与普通数组相比,vector能够动态调整大小,自动管理内存,同时保持随机访问的高效性。理解vector的内部实现机制,对于深入掌握C++内存管理和数据结构至关重要。
1.1 Vector的内存模型
vector采用连续内存空间存储元素,通过三个关键指针管理内存:
_start:指向数组首元素_finish:指向最后一个元素的下一个位置endofstorage:指向分配内存空间的末尾
这种设计使得vector能够:
- 在O(1)时间内获取大小(
size = _finish - _start) - 在O(1)时间内获取容量(
capacity = endofstorage - _start) - 高效实现随机访问(通过指针算术运算)
注意:vector的迭代器本质就是原生指针(T*),这也是为什么vector的迭代器支持随机访问特性。
1.2 基础接口实现
让我们先看一个最简化的vector框架实现:
cpp复制template<class T>
class vector {
public:
typedef T* iterator;
typedef const T* const_iterator;
// 无参构造
vector()
:_start(nullptr)
,_finish(nullptr)
,_endofstorage(nullptr)
{}
// 析构函数
~vector() {
if (_start) {
delete[] _start;
_start = _finish = _endofstorage = nullptr;
}
}
size_t size() const { return _finish - _start; }
size_t capacity() const { return _endofstorage - _start; }
private:
iterator _start;
iterator _finish;
iterator _endofstorage;
};
这个基础框架已经展示了vector的核心设计理念:
- 使用模板支持泛型编程
- 通过指针差值计算大小和容量
- 在析构时正确释放内存
2. Vector构造函数的实现细节
2.1 多种构造方式解析
vector提供了多种构造函数以适应不同场景:
cpp复制// 无参构造
vector()
:_start(nullptr)
,_finish(nullptr)
