设为首页 加入收藏

TOP

4.10.3 比较数组、vector对象和array对象
2013-10-07 15:42:41 来源: 作者: 【 】 浏览:92
Tags:4.10.3 比较 vector 对象 array

4.10.3  比较数组、vector对象和array对象

要了解数组、vector对象和array对象的相似和不同之处,最简单的方式可能是看一个使用它们的简单示例,如程序清单4.24所示。

程序清单4.24  choices.cpp

 
下面是该程序的输出示例:
 

程序说明

首先,注意到无论是数组、vector对象还是array对象,都可使用标准数组表示法来访问各个元素。其次,从地址可知,array对象和数组存储在相同的内存区域(即栈)中,而vector对象存储在另一个区域(自由存储区或堆)中。第三,注意到可以将一个array对象赋给另一个array对象;而对于数组,必须逐元素复制数据。

接下来,下面一行代码需要特别注意:

 
索引-2是什么意思呢?本章前面说过,这将被转换为如下代码:
 


其含义如下:找到a1指向的地方,向前移两个double元素,并将20.2存储到目的地。也就是说,将信息存储到数组的外面。与C语言一样,C++(www.cppentry.com)也不检查这种超界错误。在这个示例中,这个位置位于array对象a3中。其他编译器可能将20.2放在a4中,甚至做出更糟糕的选择。这表明数组的行为是不安全的。

vector和array对象能够禁止这种行为吗?如果您让它们禁止,它们就能禁止。也就是说,您仍可编写不安全的代码,如下所示:

 

然而,您还有其他选择。一种选择是使用成员函数at()。就像可以使用cin对象的成员函数getline()一样,您也可以使用vector和array对象的成员函数at():

 

中括号表示法和成员函数at()的差别在于,使用at()时,将在运行期间捕获非法索引,而程序默认将中断。这种额外检查的代价是运行时间更长,这就是C++(www.cppentry.com)让允许您使用任何一种表示法的原因所在。另外,这些类还让您能够降低意外超界错误的概率。例如,它们包含成员函数begin()和end(),让您能够确定边界,以免无意间超界,这将在第16章讨论。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.10.1 模板类vector 下一篇4.10.2 模板类array(C++11)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何利用Python做数 (2025-12-24 23:48:36)
·如何使用python进行 (2025-12-24 23:48:34)
·python 爬虫入门该怎 (2025-12-24 23:48:31)
·Java 实现多个大文件 (2025-12-24 23:22:00)
·Java多线程编程在工 (2025-12-24 23:21:56)