boost::array
的性能与std::vector
相比如何,哪些因素对其影响较大?
最佳答案
boost::array
(或 C++0x 的 std::array
)应该比 std::vector
快,因为 >boost::array
实例完全在堆栈上。这意味着 boost::array
没有堆分配,这也意味着它不能增长到超过您在构造时为其指定的大小。
boost::array
的目的是充当原始数组周围的薄层,因此您可以使用 .begin()
将它们视为标准容器,.end()
等。好的编译器应该消除 boost::array
的所有开销,使其与原始数组的性能相同。
所有这些都与“默认”设置有关,您没有自定义分配器,您可以测量简单的事情,例如数组构造、元素的访问和修改。另一方面,在其他测试、其他平台或通过巧妙的设置,情况可能会好转。例如,
- 如果您创建一个自定义分配器,可能在程序启动时获取一个大内存池,那么构建或调整
std::vector
的大小可能不再那么昂贵。 - 将一个
std::vector
与另一个交换通常是一个非常快速的操作;交换两个指针的速度。交换两个boost::array
实例可能要昂贵得多;按照复制n
元素的顺序。但是,在 C++0x 中,std::array
将成为其中的一部分,由于右值引用及其移动语义,交换两个数组将再次变得很快。 - 复制 vector 可能是一个非常快的操作;与复制指针一样快(写入时复制)。复制
boost::array
可能需要复制每个数组元素。再说一次,有时复制任何对象都非常快,甚至比复制指针甚至在 C++03 编译器中还要快——这要归功于复制省略。
您可以分析以查看哪个更快适合您的使用,但即使是此测试也只能让您了解特定平台上特定编译器的特定版本。
关于c++ - 标准 vector 和 boost 数组 : which is faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994850/