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