stl向量如何提供随机访问

时间:2009-11-11 18:53:49

标签: c++ stl stdvector

昨天晚上我正在使用std :: vector进行工作,这个问题突然出现在我脑海中:矢量如何提供随机访问?

我试图查看代码,但没有成功。谁能指点一下呢?

谢谢, 阿伦

4 个答案:

答案 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的因子 重要的是它是一个因素,所以你得到指数向量增长。