1

在比较 Java 和 C++ 之间的性能时,我们的教授声称,选择原生数组(类似动态数组int * a = new int[NUM])而不是 std::vector 没有任何好处。她也声称,优化后的向量可以更快,但没有告诉我们原因。矢量背后的魔力是什么?

请只回答性能问题,这不是一般的民意调查!

4

3 回答 3

3

任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或追平std::vector. 但是拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升。

  1. vector 管理它自己的内存,你必须记住的数组来管理内存
  2. vector 使您可以更轻松地使用 stdlib(使用动态数组,您必须自己跟踪结束 ptr),这一切都写得很好,经过良好测试的代码
  3. 有时向量甚至可以更快,比如 qsort v std::sort,阅读这篇文章,记住这可能发生的原因是因为编写更高级别的代码通常可以让你更好地推理手头的问题。
  4. 由于 std 容器可以很好地用于其他一切,动态数组不包括在内,因此保持代码风格一致可以使其更具可读性并且不易出错。

我要记住的一件事是,您不应该将动态数组与它们进行比较,std::vector它们是两种不同的东西。应该将它与可能不会进入 c++14 的东西进行比较std::dynarray(boost prolly 有一个,我确信周围有参考实现)。std::dynarray实现不太可能与本机数组有任何性能差异。

于 2013-11-11T23:05:56.353 回答
1
  1. 当需要更改元素的数量时,使用向量而不是数组是有好处的。
  2. 两个优化的向量都不能比数组快。
于 2013-11-11T23:03:51.873 回答
0

a 可以对普通数组提供的唯一性能优化std::vector是,它可以请求比当前需要更多的内存。std::vector::reserve就是这样做的。向其添加元素capacity()将不再涉及任何分配。

不过,这也可以用普通数组来实现。

于 2013-11-11T23:07:45.333 回答