虽然人们普遍认为 std::vector 的操作与数组类似,但最近的测试对这一概念提出了挑战。在本文中,我们将研究 std::vector 和普通数组之间的性能差异,并阐明根本原因。
为了进行测试,实施了一个基准测试,其中涉及重复创建和修改大型数组像素对象。测试使用两种实现进行:std::vector 和模拟普通数组的原始指针。
初步结果显示存在显着的性能差距,std::vector 比普通数组慢大约 3-4 倍。
UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds
这个令人惊讶的发现促使我们对代码进行更仔细的检查。人们发现,明显的性能差异源于这样一个事实:修改向量中的元素需要访问它两次:一次调整向量大小,再次初始化元素。
通过优化向量实现来初始化每个元素仅一次元素,我们就获得了显着提高的性能:
UseVector completed in 2.216 seconds
此修改后的性能现在可与普通数组相媲美。值得注意的是,观察到的细微差异可能归因于与底层数据结构无关的因素。
总之,虽然 std::vector 是一种方便且通用的数据结构,但其性能可能会受到因素的影响例如元素初始化和访问的方式。当性能至关重要时,明智的做法是仔细考虑具体要求并探索替代选项,例如普通数组或其他数据结构。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3