算法之路helloworld被隐藏了的过程程序员

vector容器详解

2016-06-16  本文已影响378人  b64c74899092

vector容器

使用vector之前要导入头文件

#include<vector>

其中vector是一个定义于namespace std内的模板(template):

namespace std{
    template <class T, class Allocator = allocator<T> >
    class vector;
}

vector中的元素可以使任意类型,但是必须能够赋值和拷贝。第二个参数可有可无,是用来定义内存模型(memory model),缺省的内存模型是C++标准库提供的allocator。

vector的特点

vector中的元素总是存在某种顺序,支持随机存取,在末端删除或添加元素时,性能很好,但是如果在其他地方添加删除元素性能下降很多,因为每次操作后后面的每个元素都要移动,每次移动都要调用赋值操作。

大小(size)和容量(capacity)

大小就是容器实际存储的元素数量,容量是可以存储的元素数量。

vector操作大小的函数有size(),empty(),max_size()。还有capacity(),它返回容器实际能够容纳的元素数量。

确定vector的容量很重要:

可以使用reserve()保留适当空间,避免不断重新配置内存。

另一种方法是在初始化时就保证足够的空间。

如果reserve()给的参数比实际容量还小,不会发生任何反应。

删除元素的时候,肯定不会超过容量,所以肯定不会引起内存重新配置,但是插入元素的时候有可能。

vector的容量不会减少,不过有个间接减少容量的方法,就是通过swap(),交换内容后,容器的容量也会交换。

std::vector<T> (v).swap(v);

通过构造一个和原来一样的vector,但是新的容器没有预留空间,通过swap()就可以缩减容量,前提是原来的vector有多余的预留空间。

vector的操作函数

构造函数和析构函数

非变动性操作

赋值

元素存取(只有at会检查越界并抛出异常,其他函数都不做检查,如果越界,会引发未定义行为)

迭代器

插入和删除元素(插入删除元素都会使插入删除点后面的元素的指针、引用、迭代器失效,如果引发内存重新配置,所有元素的都会失效)

按照下面要求这么做会比较快(性能好)

  • 在尾部插入或删除
  • 容量足够大
  • 插入或删除多个元素时,操作次数越少越好(函数调用越少越快)
上一篇下一篇

猜你喜欢

热点阅读