【发布时间】:2017-04-24 07:37:11
【问题描述】:
vector vs valarray 的问题已经被问到here。
我的问题专门针对 C++11 的情况。我一直在阅读"A Tour of C++" 和"The C++ Programming Language"。这两本书均由 Bjarne Stroustrup 撰写。在第一本书中,作者解释说,std::valarray 应该是数值计算的首选(第 12 章)。但是在第二本书的第 29 章中,作者根据 std::vector 实现了一个 Matrix 类。
另外,通过做一些googling,似乎在性能方面,std::vector 与动态分配的“原始数组”一样快。
那么在 C++11 的上下文中,数值计算应该首选哪个容器?
我对此的看法是,因为std::vector 使用operator[] 提供对其内容的快速访问(它返回对数据的引用而不进行边界检查)并且使用std::vector 也更安全在动态分配的数组上,std::vector 应该是首选。
此外,从 C++11 开始:
-
std::vector使用std::vector::data()提供对基础数据的直接访问 - std::vector 可以使用
std::vector::shrink_to_fit()调整大小以使用更少的内存
【问题讨论】:
-
你为什么不测量和验证哪个会更快。在现代 C++ 世界中,std::vector 应该用作默认容器,除非我们有理由不这样做。