C ++ Оптимизация производительности, определяющая многомерный вектор - PullRequest
0 голосов
/ 01 мая 2020

У меня проблемы со временем разработки с этим кодом

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.

Спасибо

1 Ответ

2 голосов
/ 01 мая 2020

Предполагая, что ваши целые числа составляют 4 байта, этот вектор представляет по меньшей мере 13 гигабайт.

Это смехотворно велико для большинства приложений, о которых я только могу подумать.

Скорее всего, вам не помешает редкий массив. Если нет, как только вы достигнете таких размеров, просто выделите один вектор и используйте отображение от 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;

Или используйте специализированную библиотеку, которая будет обрабатывать все это для вас.

...