在比较 Java 和 C++ 之间的性能时,我们的教授声称,选择原生数组(类似动态数组int * a = new int[NUM]
)而不是 std::vector 没有任何好处。她也声称,优化后的向量可以更快,但没有告诉我们原因。矢量背后的魔力是什么?
请只回答性能问题,这不是一般的民意调查!
任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或追平std::vector
. 但是拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升。
我要记住的一件事是,您不应该将动态数组与它们进行比较,std::vector
它们是两种不同的东西。应该将它与可能不会进入 c++14 的东西进行比较std::dynarray
(boost prolly 有一个,我确信周围有参考实现)。std::dynarray
实现不太可能与本机数组有任何性能差异。
a 可以对普通数组提供的唯一性能优化std::vector
是,它可以请求比当前需要更多的内存。std::vector::reserve
就是这样做的。向其添加元素capacity()
将不再涉及任何分配。
不过,这也可以用普通数组来实现。