访问数组比访问向量更快吗?

时间:2010-10-17 03:38:26

标签: c++ arrays stdvector

  

可能重复:
  Using arrays or std::vectors in C++, what's the performance gap?
  std::vector is so much slower than plain arrays?

内存是1000个元素的向量 array []是一个1000个元素的整数数组

for (iteration = 0; iteration < numiterations; iteration++) {
    for (j = 1; j < numints; j++) {
       memory[j] += memory[j - 1];
       //array[j] += array[j - 1];
    }
}

如果我在运行100次迭代后比较for循环的时间,那么访问所需的时间与向量相比非常小

为什么会这样? 因为我认为两者都是恒定的,几乎是同一时间..

3 个答案:

答案 0 :(得分:5)

由于std::vector的大多数(如果不是全部)实现在内部使用T*数组,因此使用{{访问向量元素和C数组元素之间应该没有任何性能差异。 1}}运算符设置优化标志时。使用编译器的优化标志再次尝试测试。

但是,使用[]函数可能不是这种情况,因为此函数将执行边界检查。

答案 1 :(得分:4)

这通常取决于(几乎完全)您是否将编译器设置为内联函数。 std::vector使用一个函数(名为operator[])来处理项目。如果该函数不是内联生成的,则调用该函数的开销将大大增加了解决数组中项目所需的时间。如果将编译器设置为生成内联函数,则通常无法测量两者之间的有意义差异。

答案 2 :(得分:0)

没错,他们都是不变的时间。但是,向量是一个对象,重定向函数调用会有一个惩罚。考虑这是您第一次使用C ++运算符重载。 vector类重载[]运算符以实现与真实数组类似的语义。