Vector操作

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vector

Vector 是同一类型的集合。每个对象都有一个对应的整数索引值。我们把vector 称为容器,是因为它可以包含其他对象。

vector 不是数据类型,只是模板,它可以定义多种数据类型。Vector类型的每一种都指定了其他保存的元素的类型。

Vector的定义和初始化

注意:

1,创建非空的vector对象,必须给出初始化的值。

2,当把一个vector对象复制到另外一个vector对象时候,新复制的对象每个元素都初始化为原vector相应的元素副本。但是这两个vector的对象类型一定要一样。

Vector值初始化

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

问题,下列哪些vector定义不正确。

vector> ivec;

vectorsvec = ivec;

vectorsvec(10,”null”);

下列的元素各是多少个,各个元素的值又是多少?

a,vector ivec1;

b,vectorivec2(10);

c,vectorivec3(10,42);

d,vectorsvec1;

e,vectorsvec2(10);

f,vectorsvec3(10,”hello”);

vector对象的操作

Vector的size

.size()操作返回的值不是整数类型(int ,long,char).是之固有的类型.成员函数size 返回相应vector类定义的size_type的值。

注意,使用size_type类型时候,必须制定该类型在哪里定义的。

vector::size_type;

vector::size_type;

向vector添加元素

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

Vector的下标操作

vector中的对象是没有命名的,可以按vector对象的位置来访问他们。通常来使用下标来获取元素。元素的位置是从0开始。

vector ivec;

ivec[0] = 42;

注意,下标操作仅能提取确实已经存在的元素。

列出三种vector对象的方法,给定10个元素,每个元素都为42,并指出是否还有更好的实现方法?

迭代器简介

迭代器是一种检查容器内元素并遍历元素的数据类型。

所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。vector::interator iter;

bigin和end操作

每种容器都定义了一对命名为begin和end的函数,用于返回迭代器,如果容器中有元素的话,由begin返回的迭代器指向第一个元素。

vector :: interator iter = ivec.begin();

由end操作返回的迭代器指向vector的“末端元素的下一个”。通常称为超出末端迭代器,表明它指向了一个不存在的元素,如果vector为空,begin返回的迭代器与end返回的迭代器是相同的。

由于end操作返回的迭代器并不指向vector中的任何实际的元素,相反,它只是起一个哨兵的作用,表示我们已经处理完vector中的所有元素。

vector迭代器的自增和解引用运算

迭代器类型可以使用解引用操作符来访问迭代器所指向的元素。

*iter = 0;

假设,iter指向vector对象的ievc的第一个元素,那么*iter和ievc[0]就事指向的同一个元素。

迭代器使用自增操作符,向前移动迭代器指向容器的下一个元素,从逻辑上说,

迭代器的自增作用和int类型对象自增操作类似。对于int类型对象来说,操作结果就事把int类型的值“加1”,而对迭代器对象则是把容器的迭代器“向前移动一个位置”,因此,如果迭代器iter指向第一个元素,则++iter指向第二个元素。

迭代器的其他操作

另一对可执行于迭代器的操作就事比较,用== 或!= 来比较两个迭代器,如果两个迭代器对象指向同一个元素,则他们相等,否则他们不相等。

for(vector::iterator iter = ivec.begin() ; iter != ivec.end(); ++iter) *iter = 0;

const_iterator

每种容器还定义了一种名为const_iterator的类型,该类型只能用于读取容器的元素,但不能改变其值。

我们对普通的interator解引用时候,得到是某个元素的非const引用。而如果我们对const_interator类型解引用,则可以得到一个指向const对象的引用,如同任何常量一样,该对象不能进行重写。

for(vector :: const_iterator iter = text.begin() ; iter != text.end(); ++iter) cout << *iter << endl;

作业,编写程序来创建10个元素的vector对象,用迭代器来把每个元素值改成当前值的2倍。

相关文档
最新文档