我非常熟悉STL向量(和其他容器)的性能保证,但是我似乎无法找到关于普通数组的具体内容。
指针算术和[]方法是常数还是线性时间?
答案 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)
指针算法是常量 - 它通常是单个乘法和基数的加法。 []也是一种指针算法。