Вместо того, чтобы вручную выделять массив, вы должны по крайней мере использовать std::vector
.То, что вам нужно сделать, это иметь заголовочный файл, содержащий
extern std::vector<std::vector<std::vector<int>>> data;
, который вы включите во все файлы cpp, с которыми вы хотите поделиться вектором, а затем в одном файле cpp иметь
std::vector<std::vector<std::vector<int>>> data = std::vector<std::vector<std::vector<int>(a, std::vector<std::vector<int>>(b, std::vector<int>(c)));
и теперь у вас будет глобальный объект, к которому предоставлен общий доступ и у которого есть управляемое время жизни.
Вы не должны использовать вложенный вектор.Он может разбрасывать данные в памяти, поэтому он не очень удобен для кэша.Вы должны использовать класс с одним вектором измерения и делать вид, что он имеет несколько измерений с использованием математики.Очень простой пример этого будет выглядеть как
class matrix
{
std::vector<int> data;
int row; // this really isn't needed as data.size() will give you rows
int col;
int depth;
public:
matrix(int x, int y, int z) : data(x * y * z), row(x), col(y), depth(z) {}
int& operator()(int x, int y, int z) { return data[x + (y * col) + (z * col * depth)]; }
};
, тогда заголовочный файл будет
extern matrix data;
, а один файл cpp будет содержать
matrix data(a, b, c);