首页 > 代码库 > C++标准模板库之vector(Boolan)

C++标准模板库之vector(Boolan)

  vector是C++标准模板库中一种常见的容器,像数组类似,vector使用连续的存储空间用来保存元素,使用指针偏移可以快速的访问元素(通常认为是O1复杂度),与数组不同的是它的大小是可变的,在vector内部使用动态分配的内存保存元素,这意味着vector增长时需要重新分配内存,并将原来的原来的数据复制到该内存单元,需要很大的开销,因此vector并不会在每次新增元素时候都重新分配内存空间。vector实际容量(capacity)通常比实际大小(size)大得多。参考数据结构(C++语言版),我们可以看到capacity的增长都是成倍增长的:

  

template <typename T> void vector<T>::expand() {
    if (_size < _capacity) return;
    T *oldElem = _elem; _elem = new T[_capacity <<= 1];
    for (int i = 0; i < _size; i++)
        _elem[i] = oldElem[i];
    delete [] oldElem;
}

  vector的常见构造方法:

  1. 默认构造,构造一个空容器,没有元素。
  2. 构造n个元素,每个元素为m
  3. 区间构造,可以是迭代器,也可以数组区间
  4. 复制构造

下面为具体代码示例:

    std::vector<int> first;
    std::vector<int> second (5,100);
    std::vector<int> third (second.begin(),second.end());
    std::vector<int> fourth (third);                       // 复制构造

    int ary[] = {6,12,17,2};
    std::vector<int> fifth (ary, ary + sizeof(ary) / sizeof(int) );

    for (auto it = fifth.begin(); it != fifth.end(); ++it)
        std::cout <<   << *it;
    std::cout << std::endl;

 

C++标准模板库之vector(Boolan)