举例理解
我们可以这样理解数组:一连串的数据。在不同语言环境中叫法和特性不同,在python中称为list, 不要求相同类型, 在c++中要求相同类型。数组根据维度划分可分为一位数组和多维数组, 一般而言,一维和二维数组较常见, 多维数组通常出现在动态规划中, 在深度学习中的张量tensor本身是多维数组
常用操作 简单举例
-
遍历
伪代码举例:
for i in range(n): for j in range(m): array[i][j] = t
-
索引
通过下标访问具体数据
伪代码
lst_of_random_things = [1, 3.4, 'a string', True] print(lst_of_random_things[0]) # 1
-
动态数组的实现
目标:实现最后一个插入、最后一个删除、大小、索引 插入、删除、获取大小、索引
方式:假定一个数组长度为10
- 数组长度增加1 再插入元素
- 数组长度扩大一倍 再插入元素
分析选哪种?
-
如果我们每次插入一个元素的话,都要申请一个长度为n的数组,插入n个元素的时候就是:
f(n) = 1 + 2 + 3 + … + n 每一次循环都是n, n个数,循环n次 O(n^2) 的级别 -
如果每一次都扩展一倍,假设最后一次数组长度为n, 那么上一次是 n / 2, 再上一次是 n / 4
f(n) = n + n/2 + n/4 + n/8 + … <= 2n 最终是 O(n) 的级别
这就是常说的用空间换时间的方式
备用属性或函数
push_back pop_back index size
如何实现?
push_back : 检查size是否满, 如果满, allsize倍增, a 倍增, 然后插入一个元素
pop_back : 删除最后元素, size - 1
index : 返回 a 的相应位置元素
size : 返回 size