可能重复:
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循环的时间,那么访问所需的时间与向量相比非常小
为什么会这样? 因为我认为两者都是恒定的,几乎是同一时间..
答案 0 :(得分:5)
由于std::vector
的大多数(如果不是全部)实现在内部使用T*
数组,因此使用{{访问向量元素和C数组元素之间应该没有任何性能差异。 1}}运算符设置优化标志时。使用编译器的优化标志再次尝试测试。
但是,使用[]
函数可能不是这种情况,因为此函数将执行边界检查。
答案 1 :(得分:4)
这通常取决于(几乎完全)您是否将编译器设置为内联函数。 std::vector
使用一个函数(名为operator[]
)来处理项目。如果该函数不是内联生成的,则调用该函数的开销将大大增加了解决数组中项目所需的时间。如果将编译器设置为生成内联函数,则通常无法测量两者之间的有意义差异。
答案 2 :(得分:0)
没错,他们都是不变的时间。但是,向量是一个对象,重定向函数调用会有一个惩罚。考虑这是您第一次使用C ++运算符重载。 vector类重载[]运算符以实现与真实数组类似的语义。