为什么 std::vector 比本机数组的性能更高
Why can std::vector be more performant than a native array?
在Java和C++的性能比较中,我们的教授声称,选择本机数组(像int * a = new int[NUM]
这样的动态数组)比std::vector没有任何好处。她还声称,优化的向量可以更快,但没有告诉我们原因。矢量背后的魔力是什么?
请只回答性能,这不是一般民意调查!
任何具有较低级别内容(如原始数组)的超级优化代码都可以击败或捆绑std::vector
的性能。但是,拥有向量的好处远远超过了从低级代码中获得的任何小的性能提升。
- 矢量管理它自己的内存,数组你必须记住来管理内存
- Vector 允许您更轻松地使用 stdlib(使用动态数组,您必须自己跟踪结束 PTR),这一切都是编写得很好的经过良好测试的代码
- 有时向量甚至可以更快,比如qsort v std::sort,阅读这篇文章,请记住,发生这种情况的原因是编写更高级别的代码通常可以让您更好地推理手头的问题。
- 由于 std 容器可以很好地用于其他所有内容,动态数组不会涵盖这些容器,因此保持代码样式的一致性使其更具可读性并且不易出错。
我要记住的一件事是,您不应该将动态数组与std::vector
进行比较,因为它们是两回事。它应该与类似 std::dynarray
的东西进行比较,不幸的是,它可能不会进入 c++14(boost prolly 有一个,我敢肯定周围有参考实现)。std::dynarray
实现不太可能与本机阵列有任何性能差异。
- 当需要更改元素数量时,使用向量而不是数组是有好处的。
- 优化的向量都不能比数组快。
std::vector
在纯数组上可以提供的唯一性能优化是,它可以请求比当前需要的更多的内存。 std::vector::reserve
就是这样做的。将元素添加到其capacity()
将不涉及任何更多分配。
不过,这也可以用普通数组来实现。
相关文章:
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- 数组中的不同浮点值会影响性能 10 倍 - 为什么?
- 一维数组映射方式的性能差异问题
- 将类成员数组组合到单个数组时性能下降
- 提高访问大型数组元素的性能
- 使用数组时的抽象与性能
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- C 初始化列表std ::数组最佳性能
- 数组的正确值将提高性能
- std ::数组与数组性能
- 将特征矩阵转换为 c 数组以便我可以使用 gsl 的性能高效方法是什么
- C++中使用大型数组时的性能问题
- C++-静态数组的性能,在启动时具有可变大小
- 在性能方面,我应该更喜欢数组而不是矢量吗
- 数组的结构和结构数组 - 性能差异
- 为什么 std::vector 比本机数组的性能更高
- C++数组与矢量性能测试说明
- 性能问题C++ - 搜索数组
- 数组和过滤性能
- 在将 char 数组复制到字符串期间节省 CPU 周期(提高性能)