哪个最快?一个boost::multi_array
或一个std::vector
?我将(不是恒定的)17.179.869 个元素存储在 3 个维度中,需要在for
循环中非常快速且非常频繁地访问这些元素。最有表现力的会是什么?一个std::vector
或一个boost::multi_array
?
(我不希望它在一秒钟内完成,但我希望它尽可能高效,因为纳秒的差异可以节省大量时间。)
哪个最快?一个boost::multi_array
或一个std::vector
?我将(不是恒定的)17.179.869 个元素存储在 3 个维度中,需要在for
循环中非常快速且非常频繁地访问这些元素。最有表现力的会是什么?一个std::vector
或一个boost::multi_array
?
(我不希望它在一秒钟内完成,但我希望它尽可能高效,因为纳秒的差异可以节省大量时间。)
Best advice is to benchmark it by yourself.
In any case, since you seem to have constant size there are other solutions:
int data[X][Y][Z]
)X*W*H + Y*W + Z
, can be handy in some situationsstd::array
, which is basically a C++ array with some synctactic sugar taken from STL collectionsstd::vector
, which I guess is the first solution that can be triedboost::multi_array
, which is meant to support N dimensional arrays so it can be overkill for your purpose but probably has a better locality of data compared to a vector.唯一确定的方法是同时尝试并分析代码。然而,作为一堆想法,这就是我认为你会发现的。
在一天结束时,试试看
这些库向量类被设计为易于使用且相对安全。它们在设计范围内尽可能快,但没有什么能比你自己做的更好(除了手工编码的组装)。对于您正在谈论的大小(2e10 个元素),我会更关心效率而不是用户友好性。如果您的最内层循环对每个元素进行的计算很少,您会发现索引计算占主导地位,这建议进行一些展开和指针步进。(也许你可以指望编译器做一些展开,但我不在乎也许。)