标准库—vector

      vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和string类一样,标准库将负责管理与存储元素相关的内存。我们把vector成为容器。一个容器中的所有对象都必须是同一种类型,在使用vector前,必须包含相应的头文件, #include<vector>。vector是一个类模板,使用模板可以编写一个类的定义或者函数定义,而且用于多个不同类型的数据类型。
      声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决与模板,如:
vector<int>ivec;
vector<double>ivec1;
第一个定义,类型是vector<int>,该类型即是含有若干int类型对象的vector,变量名为ivec,第二个类似。
注意:vector不是一种数据类型,而只是一个类模板,可以用开定义任意多个数据类型。vector类型的每一种都指定了其保存元素的类型。

1、vector对象的定义和初始话
vector类定义了好几种构造函数,用来定义和初始化vector对象。
 vector<T>v1;——默认构造函数,v1为空
vectro<T> v2(v1);——v2是v1的副本
vector<T> v3(n, i);——v3包含n个值为i的元素
vector<T> v4(n);——v4含有值初始化的元素的n个副本
(1)创建确定个数的元素
若要创建非空的vector对象,必须给出初始化元素的值。当把一个vector对象复制到另一个vector对象时,新复制的vector中每一个元素都初始化为原vector中相应元素的副本,如:
vector<int>ivec1;
vector<int>ivec2(ivec1);
vector<string> svec(ivec1)   //error类型不相符,不能赋值
可以用元素个数和元素值对vector对象进行初始化。构造函数用元素个数来决定vector对象保存元素的个数,元素值指定每个元素的初始值。
vector<int> ivec4(10, 1)   //10个元素,元素的值都为1
vector<string> svec(10,"hi!")    //10个元素,元素的值为"hi!'
注意 :虽然可以对给定元素个数的vector对象预先分配内存,但是更有效的方法是先初始化一个空的vector对象,然后再动态地增加元素。(vector对象的重要属性就在于可以在运行时高效的添加元素)。
(2)值得初始化
如果没有指定元素的初始化式,那么标准库将自动提供一个元素初始值进行值初始化。这个由库生成的初始值将用来初始化容器中的每一个元素。如果vector保存内置类型的元素,那么标准库将用0值创建元素初始化。
2、vector对象的操作
vector标准库提供了许多类似string对象的操作。
v.empty()——如果为空返回true,否则返回false
v.size()——返回v中的元素个数
v.push_back(t)——在v的末尾加上一个值为t的元素
v[n]——返回v中位置为n的元素
(1)vector对象的size
成员函数size返回相应vector类定义的size_type的值。

注意:使用size_type类型时,必须指出该类型是哪里定义的。vector类型总是包括vector类定义的元素类型,如: vector<int>::size_type
vector::size_type    //error

( 2)向vector添加元素
push_back()操作接受一个元素值,并将它作为新元素添加到vector对象的后面,如:
   string str;
vector<string>text;
while(cin>> str)
     text.push_back(str);
(3)vector的下标操作
vector中的对象没有名字,可以按照vector中对象的位置访问他们。通常使用下标操作来获取元素(类似与string)
for(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
         ivec[ix] = 0;

注意:vector的下标不能添加元素,如:
or(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
          ivec[ix] =ix;      //不合法
这里的ivec是空的vector对象,而且不能用于获取已经存在的元素。改正:
for(vector<int>::size_typeix = 0; ix != ivec.size(); ++ix )
         ivec.push_back(ix);

必须是已经存在的元素才能用于操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值