STL的vector初始化

STL的vector初始化

vector是连续内存容器,所以对于插入与删除的时间复杂度是很高的,因为删除或者插入的时候,需要元素的移动,即元素复制拷贝。

使用原则:

  1. 尽量使用vector代替C风格的数组或者CArray;
  2. 尽量使用算法代替手工写的循环;
  3. 尽量使用vector本身的函数代替其它泛型算法;

初始化vector

填充vector,如果我们想使用原始数组的内容填充vector,例如我们有数组int v[10] = {0,1,1,10,0,0,0,0,3,5}

  • 初始化方式1:

    1
    2
    3
    4
    vector<int> v2(10); // 初始化size为10可以避免数组动态增长的时候不断的分配内存
    for(int i = 0; i<10; i++) {
    v2.push_back(v2[i]); // 增加一个元素
    }
  • 初始化方式2:

    1
    vector<int> v3(&v[0], &v[9]); // 原始数组的元素指针可以作为迭代器来使用
  • 初始化方式3

    1
    2
    3
    vector<int> v4;
    v4.resize(10);
    v4.insert(v4.begin(), &v[0], &v[9]);
  • 初始化方式4

    1
    2
    vector<int> v5(10);
    copy(&v[0], &v[9], v5.begin());

原始数组的元素指针可以作为迭代器来使用,

  • 原则:尽量使用resize来减少不必要的内存分配次数。
  • 原则:尽量使用empty而不是size()==0来判断容器是否为空
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int a[] = {23,23,12,23,546,76};
vector<int> v;
v.resize(6);
copy(&a[0], &a[6], v.begin()); // 将a数组复制到v
v.insert(v.begin(), 4);
// 找到所有的23
vector<int>::iterator pos = find(v.begin(), v.end(), 23);
while(pos!=v.end()){
cout<<"**"<<*pos<<endl;
pos = find(pos+1, v.end(), 23);
}
for(int i = 0;i< v.size();i++){
cout<< v[i]<<" ";
}
return 0;