进入本书第四章,开始讲“数组”了。数组难不难?这不好说。但是数组非常重要这是肯定的,有许多基本的算法就是与数组一起出现的——比如冒泡排序法。而离开了那些算法,数组本身也失去了价值。
注意:阅读本章时要对“维数”概念加以小心,按平时的理解,“维数”是多维数组中的概念,但是本书中的“维数”指的是元素个数。为了避免干扰,我在阅读笔记中用“个数”来取代“维数”。
引用:在出现标准库之前,C++程序大量使用数组保存一组对象。而现代的C++程序则更多地使用vector来取代数组,数组被严格限制于程序内部使用,只有当性能测试表明使用vector无法达到必要的速度要求时,才使用数组。
笔记:我汗一个先!原来我只是一个“古代”的C++程序员。
数组的定义必需指明元素的个数,而且必须是“常量表达式”。这一点想必理解数组的人都会操作(即使弄错了,编译器也会立即报错),但是真正去思考它的人也许不多。这里的“常量”概念是指程序在编译阶段就能求值的量。
在C时代,我们并不会过多地理会“常量”这个概念,那是因为C时代没有const,而define这个东西,谁都知道它是在编译前就直接替换的。但是到了C++时代,由于const的存在,使“常量”这个概念变得更普杂了。
const size1 = 5;//这是个编译时就可以求值的常量,它可以在数据的定义中使用。它的作用仅仅相当于“define”。
const size = getsize();//这个常量是运行时才能求值的。
除此之外,“常量求达式”的概念还指明这可是以一个算术式,只要编译时能求值。如“char username[max_name_size + 1];”这种用法非常常用,因为它可以避免在定义数组时忘掉NULL。
数组成员的初始化可以显式指定,也可以不指定。显式指定时指定成员的个数可以小于等于实际个数,但不可以比实际个数大,如果小于,则其它元素视为未指定。对于未指定的元素的初始值,它们遵循变量的初始化原则,请看《变量初始化》一文。
绝大多数书本在介绍“字符串”时都会提到,字符串其实是字符数组,只是因为它们太常用,才会有专门的使用方法。本书也不例外。
本书没有提数组的实质,因为“指针”还没有进入读者的眼睛。
引用:数组的显著缺点在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。
笔记:其实这正在程序员心中的一个痛。当我把数组作为参数传送给函数时,函数该怎么处理这个东西?要么是对大小有个事先的约定——这样的程序将失去很多通用性,要么连大小一起传递给人家。
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
