“可变大小”数组,存储对象,类模板(定义时需要指明存储对象的类型)。
这里只专门介绍一些vector的操作,vector是顺序容器,所以vector同样支持所有顺序容器的特性。
vector是顺序容器,支持顺序容器的所有操作

一、初始化、赋值

  1. vector<int> ivec; // ivec 保存 int 类型的对象
  2. vector<Sales_item> Sales vec; // 保存 Sales_item 类型的对象
  3. vector<vector<string>> file; // 该 向量的元素是 vector 对象
  4. vector<T> v1 // v1 是一个空vector,它潜在的元素是T类型的,执行默认初始化
  5. vector<T> v2(v1) // v2 中包含有v1所有元素的副本
  6. vector<T> v2 = v1; // 与上等价
  7. vector<T> v3(n, val) // v3 包含了n个重复的元素,每个元素的值都是val
  8. vector<T> v4(n) // v4 包含了n个重复地执行了值初始化的对象
  9. vector<T> v5{a,b,c...} // v5 包含了初始值个数的元素,每个元素被赋予相应的初始值
  10. vector<T> v5={a,b,c...} // 与上等价
  11. int int_arr[] = {0, 1, 2, 3, 4, 5}; // 标准库函数begin,end函数见下面
  12. vector<int> ivec(begin(int_arr), end(int_arr));// 数组初始化vector,反过来就不行。
  13. vector<int> ivec(int_arr + 1, int_arr_3); // 数组部分初始化
  14. vector<string> v2("a", "an", "the") ; // 错误,要用花括号
  15. vector<string> v6("hi"); // 错误:不能使用字符串宇面值构建 vector 对象
  16. vector<string> v7{10}; // v7有10个默认初始化的元素
  17. vector<string> v8{10, "hi"}; // v8有10个值为"hi"的元素

二、vector其他操作

vector一般没必要初始化指定大小,因为push_back是高效的。

  1. vector<type>::size_tpe v.size() // 返回v中元素的个数
  2. v.empty() // 如果v不含有任何元素,返回真:否则返回假
  3. v.push_back(t) // 向v的尾端添加一个值为t的元素
  4. v[n] // 返回v中第n个的“引用”,下标类型size_type
  5. // 只能访问,不能插入元素
  6. v1 = v2 // 用v2中元素的拷贝替换vl中的元素
  7. v1 = {a, b, c ...} // 用列表中元素的拷贝替换vl中的元素
  8. v1 == v2 // vl和v2相等当且仅当它们的元素数量相同且对应位置的元素值都相同
  9. v1 != v2 // 所有标准库容易都定义了!=、==
  10. <, <= , >, >= // 顾名思义,以字典顺序进行比较
  11. // 只有少数标准容器定义了。
  12. vector<int>::size_type = t.size(); // 正确
  13. auto sizetype = t.size();
  14. vector::size_type = t.size(); // 错误

三、空间如何增长

vector想象成一个桶,桶装不下的时候,不是简单换一个大小+1的桶,而是根据分配策略分配一个大比较多的桶,省得马上又满了。

  1. // shrink_to_fit 只适用于vector、string和deque。
  2. // capacity和reserve 只适用于vector和string 。
  3. c.shrink_to_fit(); // 请将capacity()减少为与size()相同大小,只是请求。
  4. // 理解:请求换一个刚刚能装满的桶
  5. c.capacity(); // 不重新分配内存空间的话,c可以保存多少元素
  6. // 理解:当前这个桶能装多少水
  7. c.size(); // 理解:桶现在装了多少水。
  8. c.reserve(n); // 分配至少能容纳n个元素的空间,可能会触发内存重新分配
  9. // reserve并不改变容器中元素的数量,它仅影响预先分配至少多大的内存空间
  10. // 理解:桶计划要装n这么多水,你考虑下要不要换,换多大的。