前言
上一节我们分析了vector
的构造, 析构, back, front等基本操作, 这一节我们就来分析vector
实现删除等操作的实现.
vector实例
与上节一样, 我们将待会会用到的部分常用的操作先执行一次, 进行一次快速的回忆.
int main()
{
vector<int> v1;
vector<int> v2(4);
vector<int> v3(4, 1);
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
v1.push_back(5);
// 这里清除的是一个[v1.begin()+2, v1.end()-1) , 左闭右开的区间
v1.erase(v1.begin()+2, v1.end()-1);
v1.pop_back();
v2 = v1;
if(!v2.empty()) // 不为空
{
for (const auto i : v2)
{
cout << i << " ";
}
cout << endl;
cout << "size = " << v2.size() << endl;
v1.~vector();
}
exit(0);
}
vector实现
push和pop操作
vector
的push和pop操作都只是对尾进行操作. 这里说的尾部是指数据的尾部, 尾部时数组大小的尾部.
push_back
从尾部插入数据. 当数组还有备用空间的时候就直接插入尾部就行了, 当没有备用空间后就重新寻找更大的空间再将数据全部复制过去.
// 如果可用空间还有就调用对象的构造函数并使用空间的尾增加
// 没有空间就重新申请一个更大的空间, 然后进行插入
void push_back(const T& x)
{
// 如果还没有到填满整个数组, 就在数据尾部插入
if (finish != end_of_storage)