数组性能问题

时间:2010-03-31 15:09:49

标签: c++ arrays stl

我非常熟悉STL向量(和其他容器)的性能保证,但是我似乎无法找到关于普通数组的具体内容。

指针算术和[]方法是常数还是线性时间?

3 个答案:

答案 0 :(得分:9)

他们是恒定的时间。 (与vector相同。)

当您说a[b]时,它变为*(a + b)。两个(指针运算)添加和解除引用都是常量时间。

向指针添加整数时,会移动那么多元素:

T* p; size_t i;

T* q = p + i; // same as:
T* q = reinterpret_cast<T*>(reinterpret_cast<char*>(p) + i * sizeof(T));

那里的每一次操作都是恒定的时间。

答案 1 :(得分:2)

向量实际上是数组的包装器,所以它们都应该提供相同的性能保证。

答案 2 :(得分:0)

指针算法是常量 - 它通常是单个乘法和基数的加法。 []也是一种指针算法。