一、基本框架构建
与 string(专门存储字符的容器)不同,vector 是通用动态数组,可存储满足复制/赋值要求的任意类型(如 int、自定义类),并支持嵌套使用,如 vector(本质是容器的容器,但在逻辑上可看作一个存储 int 类型数据的二维数组方便理解)。
1. 基本框架
关于 vector 类的成员变量的创造,可以参考一部分 STL 源代码:
- 创建模板:为了能够将类型参数化,允许用户在实例化 vector 时显式指定存储的数据类型。
namespace mosheng {
template<class T>
class vector {
public:
typedef T* iterator; // 类型参数化的指针
// size()
size_t size() const {
return _finish - _start;
}
// capacity()
size_t capacity() const {
return _endofstorage - _start;
}
private:
iterator _start; // 指向容器底层数组的起始位置
iterator _finish; // 指向容器中最后一个有效元素的下一个位置
iterator _endofstorage; // 指向容器已分配空间最后一个位置的下一个位置
};
}
_finish - _start 即为 size(容器大小),_endofstorage - _start 即为 capacity(容器容量)。
注意:模板声明和定义不能分离(.h 与 .cpp)。
二、默认成员函数
构造函数(move 版本暂不实现):
2.1 默认构造函数 (default)
代码示例:
// 方式 1
// vector() :_start(nullptr) ,_finish(nullptr) ,_endofstorage(nullptr) {}
// 方式 2:成员函数要给上缺省值
iterator _start = nullptr;
iterator _finish = nullptr;
iterator _endofstorage = ;
() = ;

