I recently started working with C++ for numerical computations where I want to use a Struct Operators to store 3D Fields over the course of the simulation.
I create the 3D arrays on the heap with
const unsigned int RES = 256;
auto arr3D = new double [RES][RES][RES];
because from what I've tested this approach is faster than using either Boost_multiarr, Eigen Tensor or nested Vectors.
So far this worked fine with my minimalistic Test.cpp but when I try to implement these same 3D Arrays as Members of my Struct Operators, I cannot use the auto command anymore:
const unsigned int RES = 256;
struct Operators {
public:
std::complex<double>*** wfc; // edited, see 'spitconsumers' comment
Operators(Settings &set) { // just another structure used by Operators
wfc = new std::complex<double> [RES][RES][RES];
// ...Initializing wfc using Settings
};
In this case I found no way of declaring wfc, such that I do not get errors of the type
error: cannot convert 'std::complex (*)[256][256]' to 'std::complex***' in assignment
So my question is how to correctly declare the 3D Array wfc and whether maintaining this Structure approach is at all possible/useful. Would it generally be faster to access the wfc[i][j][k] if wfc was not member of a structure? (I will have to do this ~10^6 times)
Thanks in advance!