概述:
在STL诸多容器中vector一定是使用率最高的了,它使用和数据结果上与array相类似,两者唯一差别在于:array是静态空间,而vector是可变空间。因此通常将vector看作可变数组。
由于vector方法较多,在主要此讨论实现vector中要注意的几个点:
-
vector的迭代器:
对于vector而言维护的是一连续线性空间,所以不论什么类型的元素都可以用普通指针来指代,而且迭代器所要执行的操作指针都可以实现。
所以说vector中的迭代器实质是T类型的指针。
-
vector增容:
int main(){
vector<int> v(2, 9);
cout << "size = " << v.size();
cout << " \tcapacity = " << v.capacity() << endl;
int tmp = v.capacity();
for (int i = 0; i < 20; i++){
v.push_back(9);
if (tmp != v.capacity()){
tmp = v.capacity();
cout << "size = " << v.size();
cout << " \tcapacity = " << v.capacity() << endl;
}
}
return 0;
}
在VS2013下运行的结果:
在gcc下运行结果:
通过运行结果来看vs下是以1.5倍方式扩充,gcc下是以2倍方式扩充。
由于能力有限,至于为什么可参考以下博客:
https://blog.csdn.net/yangshiziping/article/details/52550291
-
vector插入
对于插入操作 insert(position, n, x);// position插入起始位置,n插入个数, x插入数据
当备用空间 > 新增元素个数:
1. 新增元素个数 <= 插入点之后元素个数
2. 新增元素个数 > 插入点之后元素个数
备用空间 < 新增元素个数:
vector实现代码: https://github.com/Timecur/STL