标准库类型 vector 表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,所应用于访问对象。因为引用不是对象,所以不包含引用的 vector 。组成 vector 的元素可以是 vector 。
vector 是一个类模板。vector 是模板而非类型,由 vector 生成的类型必须包含 vector 中元素的类型【vector<类型>
】。
#include
using std::vector;
两个 vector 对象的类型必须相同。
vector
可用 vector 对象容纳的元素数量和所有元素的统一初始值初始化 vector 对象。
vector
可只提供 vector 对象容纳的元素数量而省略初始值,此时库创建一个值初始化的元素初值,并赋给容器中的所有元素,该初值由 vector 对象中元素的类型决定。
若元素是内置类型,如int,元素初始值自动设为0;若元素是某种类类型,如string,则元素由默认初始化。
vector
// 10个元素,每个都初始化为0
vector
// 10个元素,每个都是空 string 对象
vector
// v1有10个元素,每个元素的值为0
vector
// v2有1个元素,该元素值为10
vector
// v3有10个元素,每个元素的值为1
vector
// v4有2个元素,元素值分别为10和1
使用圆括号,提供的值是用来构造vector对象的;使用花括号,可描述成列表初始化该vector对象,初始化过程会尽可能地把花括号内的值当成元素初始值的列表处理,只有无法执行列表初始化时才考虑其他初始化方式。
若初始化时使用花括号的形式,但是提供的值不能使用列表初始化,会考虑用该值构造vector对象。列表初始化vector对象,花括号的值必须与元素类型相同。
vector
// 列表初始化:v5有一个元素
vector
// 错误,不能使用字符串字面值构建vector对象
vector
// v7有10个默认初始化的元素
vector
// v8有10个值为"hi"的元素
创建一个空vector,在运行时再利用vector的成员函数 push_back 向其中添加元素。push_back 负责把一个值当成 vector 对象的伪元素“压到”vector 对象的“尾端”。若直到运行时才能知道vector对象中元素的确切个数,也可使用该方法。
vector
for(int i = 0; i != 100; ++i)
v.push_back(i);
string word;
vector
while(cin>>word){
text.push_back(word);
}
vector 对象能高效增长,能在运行时快速地添加元素。虽然如此,但是如果不在定义 vector 对象时设定其大小,性能可能更差(当所有元素的值都一样时例外)。元素的值有所不同时,有效的方法是先定义一个空的 vector 对象,再在运行时向其中添加具体值。
返回 vector 对象中元素的个数,返回值的类型是由 vector 定义的 size_type 类型。
使用 size_type ,需首先指定其是哪种类型定义的,vector 对象的类型总是包含着元素的类型。
vector
两个 vector 对象相等当且仅当它们所含的元素个数相同,而且对应位置的元素值也相同。
关系元素符依照字典顺序进行比较:如果两个 vector 对象的容量不同,但是在相同位置上的元素值都一样,则元素较少的 vector 对象小于元素较多的 vector 对象;若元素的值有区别,则 vector 对象的大小关系由第一对相异的元素值的大小关系决定。只有当元素的值可能比较时,vector 对象才能被比较【Sales_item 类不支持相等性判断和关系运算等操作,不能比较两个 vector
下标从 0 开始记,下标类型是相应的 size_type 类型。
使用下标运算符可以获取到指定的元素。可通过计算得到 vector 内对象的索引,进而直接获取索引位置上的元素。
只要 vector 对象不是一个常量,可以向下标运算符返回的元素赋值。
不能使用下标形式添加元素。当有一个空的 vector 对象时,根本不包含任何元素,就不能通过下标去访问任何元素。
下标运算符可用于访问已存在的元素,不能用于添加元素,且只能对确知已存在的元素执行下标操作。