1

可能的重复:
在 C++ 中使用数组或 std::vectors,性能差距是什么?
std::vector 比普通数组慢得多?

memory 是 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 循环的时间,访问所需的时间与 vector 相比非常小

为什么会这样?因为我认为两者都需要恒定且几乎相同的时间..

4

3 回答 3

5

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

但是,使用该std::vector<T>::at函数可能并非如此,因为该函数将执行边界检查。

于 2010-10-17T03:44:48.700 回答
4

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

于 2010-10-17T03:54:29.753 回答
0

没错,它们都是常数时间。但是,向量是一个对象,重定向函数调用会受到惩罚。考虑一下这是您第一次体验 C++ 运算符重载。vector 类重载 [] 运算符以实现与真实数组相似的语义。

于 2010-10-17T03:40:54.853 回答