昨天晚上我正在使用std :: vector进行工作,这个问题突然出现在我脑海中:矢量如何提供随机访问?
我试图查看代码,但没有成功。谁能指点一下呢?
谢谢, 阿伦
答案 0 :(得分:19)
Vector使用下面的连续内存,因此它实际上以与数组相同的方式提供随机访问:它知道起始地址和元素的大小,并进行一些指针数学运算。
答案 1 :(得分:12)
当然,这里有一些指示:
int *x, *y;
但严重的是,vector
内部只是作为数组实现。它提供了一个重载的索引操作符([]
),允许您像数组一样访问它。
答案 2 :(得分:1)
Vector通常使用动态数组实现[*] ...数据始终存储在连续的内存块中,因此指针算法可用于O(1)访问任何(已存在的)元素
高效动态数组的技巧(假设你还不知道它),总是将保留存储的大小增加至少一个常数因子(参见Jerry Coffin评论)。结果是,当我们添加无限数量的新元素时,为了简单起见将因子设为2,第一个元素被复制到第n个add,并且(2 * n)add和(4 * n)th add和......
这个系列收敛,所以我们可以保证添加N个新元素需要O(N)时间。但是,任何给定的添加都可能需要重新分配并复制所有现有元素,因此没有延迟保证。
[*]我不知道另一种能达到所需性能的机制。任何人吗?
答案 3 :(得分:1)
至少两倍
实际上,许多实现使用1.5的因子 重要的是它是一个因素,所以你得到指数向量增长。