vector的用法
关键概念: vector 容器可动态动态地添加元素个数.
vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string对象一样,标准库负责管理存储元素的相关内存。我们把vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
vector 是一个 类模板 ( class template)。模板允许程序员编写单个类或函数定义,这个类和函数定义可用于不同的数据类型上。因此,我们可以定义保存 string 对象的vector ,或保存 int 值的 vector ,或保存自定义的类类型对象(如 Sales_item 对象)的 vector。
vector对象的声明
使用 vector 之前,必须包含相应的头文件,作相应的 using 声明:
定义vector 对象
从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。
vector 对象必须说明 vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型.
初始化 vector 对象:
创建确定个数的元素
vector<int> ivec4(10,-1);// 10 elements, each initialized to -1
vector<string> svec(10, "hi!"); // 10strings, each initialized to "hi!"
vector<int>ivec1;// ivec1 holds objects of type int
vector<int>ivec2(ivec1);// ok: copy elements of ivec1 into ivec2
vector<string>svec(ivec1);// error: svec holds strings, not ints
值初始化
如果没有给出元素的初始化式,由库生成的初始值初始化容器中的每个元素。而元素初始化式的值取决于存储在 vector中元素的数据类型。
如果向量保存类类型(如 string )的元素,标准库将用该类型的默认构造函数 创建 元素初始值: 还有第三种可能性:元素类型可能是没有定义任何构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始化。
向 vector 添加元素
push_back() 操作接受一个元素值,并将它作为一个新的元素添加到 vector 对象的后面,
string word;
vector<string>text;// empty vector
while (cin >> word)
{
text.push_back(word); // append word to text
}
vector 的下标操作
vector 中的对象是没有命名的,可以按 vector 中对象的位置来访问它们。通常使用下标操作符来获取元素。
for (vector<int>::size_type ix =0; ix != ivec.size(); ++ix)
ivec[ix]= 0;
vector 的操作
vector 标准库提供许多类似于 string 对象的操作,列出了几种最重要的 vector 操作。