c++ - 标准 vector 和 boost 数组 : which is faster?

标签 c++ arrays boost stl vector

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/

相关文章:

C++ 将映射传递到 qml 以确定项目的可见性

c++ - 如何使用cpp的regex_iterator在第一次匹配时停止

c++ - 在 C++ 中实现 time_t 的错误代码

C++ 类中的 C++ 命名空间声明

java - 避免循环内使用 toCharArray() 或 arrayCopy 产生冗余

linux - 用数据填充 shell 脚本数组

python - 如何在 python3 中有效地将位从一个字节数组打包到另一个字节数组?

c++ - boost mpl 将每个元素包装在一个集合中

c++ - 如何在 Boost::DateTime 中强制执行严格解析

c++ - 如何在 C++ 中构建 glib - 构建 .cpp 时出现编译错误