vector 本质上就是使用动态分配数组来储存元素。
如果使用数组,当新元素插入时,这个数组需要被重新分配大小,为了增加存储空间。需要开辟新空间,然后将数据转移到新数组空间中。vector 和数组空间分配策略不一样,vector 会分配额外空间,分配空间比实际需要存储空间更大。
1. vector 的构造函数
class vector {
public:
vector() // 默认构造不动
:_start(nullptr), _finish(nullptr) {}
vector(vector<T>& v) // 拷贝构造
{
reserve(v.capacity()); // 先扩容
for (const auto& e : v) {
push_back(e);
}
}
vector(iterator first, iterator last) // 迭代构造
{
while (first != last) {
push_back(*first);
++first;
}
}
vector(size_t n, const T& x = T()) {
resize(n, x);
}
};
2. iterator 使用
- begin/end 获取第一个数据位置的 iterator/获取最后一个数据的下一个位置的 iterator
- 获取最后一个数据元素的 reverse_iterator,获取第一个数据前一个位置的 reverse_iterator
class vector {
public:
iterator begin() { return _start; }
iterator end() { return _finish; }
private:
iterator _start; // 指向第一个元素
iterator _finish;
iterator _end_storage;
};


