标准库vector类型

vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储元素相关的内存。我们把vector称为容器,是因为他可以包含其他对象。

一个容器中的所有对象必须是同一种类型。

vector是一个类模板。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存string对象的vector,或保存int值得vector,又或是保存自定义的类类型对象的vector。

声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存和中对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:

vector<int> ivec;

vector <Sales_item> Sales_vec;

定义vector对象要制定类型和一个变量的列表。vector不是一个数据类型,而是一个类模板可以来定义任意多种数据类型,vector类型的每一种都指定了其保存元素的类型

3.3.1 vector对象的定义和初始化

vector类定义了好几种构造函数,用来定义和初始化vector对象

1 创建确定个数的元素

若要创建非空的vector对象,必须给出初始化元素的值。当一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本。但这两个vector对象必须保存同一种元素类型。

vector<int>ivec1;

vector <int> ivec2(ivec1);

可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存元素的个数,元素值指定每个元素的初始值。

2 值初始化

如果没有给定元素的初始化,那么标准库将自行提供一个元素初始值进行值初始化。这个由库生成的初始值将用来初始化容器中的每个元素,具体值为什么,取决于存储在vector中元素的数据类型。

如果vector保存内置类型(如int类型)的元素,那么标准库将用0值创建元素的初始式:

vector<int> fvec(10);

如果vector保存的是含有构造函数的类类型(如string元素),标准库将用该类型的默认构造函数创建元素初始化式。

还有第三种可能性:元素类型可能是没有定以任何构造函数的类类型。在这种情况下,标准库扔产生一个带初始值的对象,这个对象的每个成员进行了值初始化。

3.3.2 vector对象的操作

vector彼岸准哭提供了许多类似的string对象的操作,下面列出了集中最重要的vector操作

v.empty()        如果v为空,则返回true,否则返回FALSE

v.size()        返回v中元素的个数

v.push_back(t)        在v的末尾增加一个值为t的元素

v[n]        返回v中位置为n的元素

1 vector对象的size

empty和size操作类似于string类型的相关操作。成员函数size返回相同vector类定义的size_type的值。

使用size_type类型时,必须指出该类型时在哪定义的。vector类型总是包括vector的元素类型。

vector<int> :: size_type

2 向vector添加元素

push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是push到vector对象的后面。

string word;

vector<string> text;

while (cin >> word){

text.push_back(word);

}
该循环从标准输入读取一系列string对象,之一追加到vector对象的后面。首先定义一个空的vector对象text。每循环一次就添加一个新元素到vector对象,并将从输入读取的word值赋予钙于元素。当循环结束时,text就包含了所有读入的元素。

3 vector的下标操作

vector中的对象时没有命名的。可以按vector中对象的位置来访问他们,通常使用下标操作符来获取元素。vector的下标操作类似于string类型的下表操作

vector的下标操作符接受一个值,并返回vector中该对应位置的元素。vector元素的位置从0开始,下列使用for循环把vector中的每个元素值都重置为0;

for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)

ivec[ix] = 0;

和string类型的下标操作符一样,vector下标操作符结果为左值,因此可以像循环体重所做的那样实现写入。另外,和string对象的下标操作类似,这里用size_type类型作为vector下标的类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值