1. 数组的空间与时间效率
数组占据一块连续的内存并按照顺序存储数据。
空间效率不好:创建数组时,需要首先制定数组容量的大小,然后根据大小分配内存。即使我们只在数组中存储一个数字,也要为所有的数据预先分配内训。
时间效率很高:数组中的内存是连续的,可以根据下表在O(1)时间读写任何元素。
可以根据此优点,使用数组实现哈希表。每个下标及数组中该下标对应的数字组成了一个键值-值配对。
数组下标设为哈希表的键值(Key)
数组中每一个数字设为哈希表的值(Value)
2. 动态数组
为了解决数组效率不高,设计了动态数组。如C++的STL的vector.
先为数组开辟较小的空间,然后往数组中添加数据。当数据的数目超过数组的容量时,再分配一块更大的空间,把之前的数据复制到新的数组中,再把之前的内存释放,这样能减少内存的浪费。STL的vector每次扩充容量时,新的容量都是前一次的两倍。每一次扩充容量是都有大量的额外操作,对时间性能有负面影响,因此使用动态数组是要尽量减少改变数组容量大小的次数。
3. 数组与指针
声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。该指针指向数组的第一个元素。
当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。