STL之vector

  • 头文件及声明
    1
    2
    3
    4
    5
    6
    7
    8
    #include <vector>


    namespace std
    {
    template<typename T, typename Allocator = allocator<T>>
    class vector;
    }
  • size and capacity
    vector在内存分配不足的时候会采取重新分配的方式,这将会导致很大的开销,因此,可以在使用前调用reserve(int)函数来主动分配一大块内存空间。但是该函数的分配的空间必须比原来的大,不能收缩内存,因此可以用shrink_to_fit()函数来压缩空间到合适的程度,但是该函数并不保证一定会有效执行,仅仅是发送一个请求而已,如下:

    1
    2
    3
    v.shrink_to_fit(); //并不保证执行,c++11的函数
    //在c++11之前可以这样
    std::vector<T>(v).swap(v);
  • 赋值操作

c.assign(n, elem)
c.assign(beg, end)
c.assign(initlist)

  • 插入和删除

vector并不提供删除某一个特定值的功能,因此这需要用到remove来做到,如:coll.earse(remove(coll.begin(), coll.end(), val), coll.end())remove函数并非真正的删除,而是将所有的val移动到vector的尾部,并返回新的尾后迭代器,即第一个要删除的val,然后使用earse删除。

考虑到对于插入删除性能的考虑,在进行这些操作时应该注意一下三点:1.插入和删除尽量在尾部进行;2.保证容量足够大;3.一次性插入大量元素而不是分多次进行。

  • 作为c数组使用
    和array一样永远data函数返回一个指针。