C++优化定义多维向量的性能

C++ Optimize performance defining multidimensional vector

本文关键字:向量 性能 优化 定义 C++      更新时间:2024-04-27

我对这个代码的细化时间有问题

vector <int>                        empty_a(120, 0);
vector <vector <int>>               empty_b(130, empty_a);
vector <vector <vector <int>>>      empty_c(220000, empty_b);
vector <vector <vector <vector <int>>>> res(3);
res[0]   =   empty_c;    
res[1]   =   empty_c;    
res[2]   =   empty_c;

这是我所知道的定义res等于empty_c的最快方法。这花了太多时间。也在:

vector <vector <vector <int>>>      empty_c(220000, empty_b);

花很多时间。

有最快的路吗?我也使用-O3选项。

谢谢

假设int是4个字节,则此向量至少表示13 GB。

对于我能想到的大多数应用程序来说,这是非常大的。

很可能你可以通过稀疏数组逃脱惩罚。如果没有,一旦你达到这样的大小,只需分配一个向量,并使用从3D到1D的映射,比如:

std::vector<int> flat(220000*120*130);
size_t At(size_t x, size_t y, size_t z) { return 120*130*z + 120*y+ x;}
flat[At(x,y,z)] = someValue;

或者使用一个专门的库来处理所有这些。