哪个最快? boost::multi_array
或std::vector
?
我将(不是常数)17.179.869元素存储在3个维度中,这些元素需要非常快速且经常地在for
循环内访问。表现最好的是什么? std::vector
或boost::multi_array
?
(我不希望它在一秒钟内完成,但我希望它尽可能高效,因为纳秒级差异可以节省大量时间。)
答案 0 :(得分:3)
最好的建议是自己对它进行基准测试。
在任何情况下,由于您似乎有不变的大小,因此还有其他解决方案:
int data[X][Y][Z]
)X*W*H + Y*W + Z
,在某些情况下可以很方便std::array
,它基本上是一个C ++数组,其中有一些来自STL集合的同义糖std::vector
,我猜这是第一个可以尝试的解决方案boost::multi_array
,这意味着支持N维数组,因此它可能对您的目的而言过度杀伤,但与矢量相比可能具有更好的数据局部性。答案 1 :(得分:2)
这些库矢量类设计易于使用且相对故障安全。 它们在设计中的速度和它们一样快,但没有什么能比你自己做的更好(除了手工编码的装配)。 对于你所谈论的大小(2e10元素),我会更关注效率而不是用户友好性。 如果你的最内层循环对每个元素进行非常少的计算,那么你将发现索引计算占主导地位, 这建议做一些展开和指针步进。 (也许你可以指望编译器进行一些展开,但我不关心maybes。)
答案 2 :(得分:2)
唯一可以确定的方法是同时尝试并分析代码。然而,作为一堆想法,这是我认为你会发现的。
在一天结束时,试试看