13.6 数组
我们用数组(array)来表示自由空间中分配的对象序列已经有一段时间了。与具名变量一样,我们也可以在其他的地方分配数组。实际上,数组通常可定义为
·全局变量(但定义全局变量通常是一个糟糕的主意);
·局部变量(但数组作为局部变量有严重的局限);
·函数参数(但一个数组不知道其自身大小);
·类的成员(但数组成员难于初始化)。
现在,你可能会发觉我们明显更倾向于使用vector而不是数组。如果可以选择,你应当尽可能地使用Std::vector,而在大多数场景下你是有选择权的。但是,数组在vector出现之前就已经存在很长时间了,并且它与其他编程语言(尤其是C语言)中提供的数组大致相同,因此你必须了解数组,而且必须深入了解,以便能处理旧代码和未意识到vector优点的人编写的代码。
那么,什么是数组呢?我们该如何定义数组?又该如何使用数组?一个数组就是内存中连续存储的同构对象序列;也就是说,一个数组中的所有元素都具有相同的类型,并且各元素之间不存在内存间隙。数组中的元素从0开始顺序编号。在声明中,我们用“方括号”表示数组:
注意数组使用的限制:一个具名数组的元素数目必须在编译时就已知。如果你希望元素的数目是一个变量,那么就必须在自由空间中分配数组,并通过指针对数组进行访问。这正是vector对其元素数组所做的。
像在自由空间中的数组一样,我们通过下标与解引用运算符([]和*)访问具名数组。例如:
此函数能够通过编译,但我们知道,“通过编译”并不意味着函数能够“正确工作”。运算符[]的使用是显而易见的,但范围检查却没有进行。因此,虽然函数f2()通过了编译,但对lac[-2]和lac[200]进行写操作的后果是灾难性的,我们应避免这样的操作。数组不会进行范围检查。再次强调,在本例中我们在直接处理物理内存,不要期待“系统支持”。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access
