面向对象技术(C++ Primer)第3章.pptVIP

  • 1
  • 0
  • 约3.18万字
  • 约 42页
  • 2019-04-03 发布于江苏
  • 举报
21. Push_back()操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面,也就是插入(push)到vector对象的后面(back).该循环从标准输入读取一系列string对象,逐一追加到vector对象的后面。首先定义一个空的vector对象text.每循环一次就添加一个新元素到vector对象,并将从输入读取的word值赋预该元素。当循环结束时,text就包含了所有读入的元素。 22. Vector中的对象未命名,可以按vector中对象的位置来访问它们。通常使用下标操作符来获取元素。这与string类型的下标操作相似。 上例中使用for循环把vector中的每个元素值都重置为0. 和string类型的下标操作符一样,vector下标操作的结果为左值,因此可以无穷无尽 循环体中所做的那样实现写入。另外,和string对象的下标操作类似,这里的size_type类型作为vector下标的类型。 在上例中,即使ivec为空,for循环也会正确执行。Ivec为空则调用size返回0,并且for中的测试也比较ix和0。第一次循环时,由于ix本身就是0,条件测试失败,for循环体一次也不执行。 C++程序员习惯于优先选 用!=而不是来编写循环条件。在上例中,选用或不用某种操作符并没有特别的取舍理由。学完本书第二部分的泛型编程后,你将会明白这种习惯的合理性。 另外,这里调用size成员函数而不保存它返回的值。这是因为C++中有些数据结构(如vector)可以动态增长。上例中循环仅需要读取元素,而不需要增加新元素。但是,在循环体中是有可能增加新元素的。如果确实增加了新元素的话,测试已保存的size值作为循环的结束条件就会有问题,因为没有将新加入的元素计算在内。所以我们倾向于在每次循环中测试size的当前值,而不是在进入循环前,存储size值的副本。 有的同学会说这样每次调用size有效率问题。我们在第7章中会学到,C++中有些函数可以声明为内联(inline)函数。编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的函数调用。像size这样的小库函数几乎都定义为内联函数,所以每次循环过程中调用它的运行时代价也是比较小的。 23. 初学C++的程序员可能会认为vector的下标操作可以添加元素。其实不然,这是和数组概念上最大的区别。 上述程序试图在ivec中插入10个新元素,元素值依次为0到9的整数。但是,这里,ivec是空的vector对象。下标只能用于获取已存在的元素。正确写法: 对于下标操作符[]的使用有一点非常重要。仅能提取确实已存在的元素。 24. 试图获取不存在的元素必然产生运行时错误。和大多数同类错误一样,不能确保执行过程可以捕捉到这类错误,运行程序的结果是不确定的。由于取不存在的元素的结果标准没有定义,因而不同的编译器会导致不同的结果,但程序运行时几乎肯定会以某种有趣的方式失败。 本警告适用于任何使用下标操作的时候。如string类型的下标操作,以及将要介绍的内置数组的下标操作。不幸的是,试图对不存在的元素进行下标操作是程序设计过程中经常会犯的严重错误。所谓的“缓冲区溢出”错误就是对不存在的元素进行下标操作的结果。这样的缺陷往往导致PC机和其他应用中最常见的安全问题。 25. 除了使用下标来访问vector对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器访问。迭代器类型提供了比下标操作更通用的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作来访问容器元素,即使对支持下标操作的vector类型也是这样。 每种容器类型都定义了自己的迭代器类型,上式中,iter变量是由vectorint定义的iterator类型。每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型含义是相同的。有许多用作迭代器的类型。这些类型在概念上是相关的。若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素,并访问这些元素的值),我们就称这种类型为迭代器。各容器类都定义了自己的iterator类型,用于访问容器内的元素。换句话说,每个容器都定义了一个名为iterator的类型,这种类型支持迭代器的各种操作。 26. 每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素。上述语句把iter初始化为由名为begin的vector操作返回的值。假设vector不空,初始化后。Iter即指该元素为ivec[0

文档评论(0)

1亿VIP精品文档

相关文档