C++中的中的vector容器对象学习笔记容器对象学习笔记
主要介绍了C++中的vector容器对象学习笔记,其中文章最后标红的resize与reserve方法的差别特别需要注意,需
要的朋友可以参考下
C++中数组很坑,有没有类似Python中list的数据类型呢?类似的就是vector! vector 是同一种类型的对象的集合 ,每个对象
都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。 我们把 vector 称为容器,是因
为它可以包含其他对象 。 一个容器中的所有对象都必须是同一种类型的 。
vector对象的定义和初始化对象的定义和初始化
同样的,使用前,导入头文件#include <vector> 可以使用using声明:using std::vector;
vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我
们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如 Sales_items 对象)的
vector。
声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。 以 vector 为例,必须说明 vector 保存何
种对象的类型,通过将类型放在类型放在类模板名称后面的尖括号中来指定类型:
vector<T>
v1;
保存类型为 T 对
象。默认构造函
数 v1 为空。
vector<T>
v2(v1);
v2 是 v1 的一个
副本。
vector<T>
v3(n, i);
v3 包含 n 个值
为 i 的元素。
vector<T>
v4(n);
v4 含有值初始
化的元素的 n 个
副本。
【注意:1、若要创建非空的 vector 对象,必须给出初始化元素的值;2、当把一个 vector 对象复制到另一个 vector 对象时,
新复制的 vector 中每一个元素都初始化为原 vectors 中相应元素的副本。但这两个 vector 对象必须保存同一种元素类型;3、
可以用元素个数和元素值对 vector 对象进行初始化。构造函数用元素个数来决定 vector 对象保存元素的
个数,元素值指定每个元素的初始值】
vector对象动态增长 :
vector 对象(以及其他标准库容器对象)的重要属性就在于 可以在运行时高效地添加元素。
【注意:因为
vector 增长的效率高增长的效率高
,在元素值已知的情况下,最好是动态地添加元素。】
值初始化:
如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行,具体值为何,取决于存储在vector 中元素的数据
类型。
如果为int型数据,那么标准库将用 0 值创建元素初始化式;
如果 vector 保存的是含有构造函数的类类型(如 string)的元素,标准库将用该类型的默认构造函数创建元素初始化式;
元素类型可能是没有定义任何构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行
了值初始化。
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::vector<int> a;
std::vector<int> b(a);
std::vector<int> c(10, 23);
std::vector<std::string> svec(10, "null");
std::vector<std::string> svec2(10, "hi!");
std::vector<std::string> svec3(10);