【发布时间】:2021-08-28 13:07:07
【问题描述】:
我最近开始使用 C++ 进行数值计算,我想在模拟过程中使用 Struct Operators 来存储 3D 场。
我用
const unsigned int RES = 256;
auto arr3D = new double [RES][RES][RES];
因为根据我的测试,这种方法比使用 Boost_multiarr、Eigen Tensor 或嵌套向量更快。
到目前为止,这适用于我的简约 Test.cpp,但是当我尝试将这些相同的 3D 数组实现为 Struct Operators 的成员时,我无法再使用 auto 命令:
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
};
在这种情况下,我找不到声明 wfc 的方法,这样我就不会收到该类型的错误
错误:无法在赋值中将 'std::complex (*)[256][256]' 转换为 'std::complex***'
所以我的问题是如何正确声明 3D 数组wfc 以及维护这种结构方法是否完全可能/有用。如果wfc 不是结构的成员,访问wfc[i][j][k] 通常会更快吗? (我将不得不这样做〜10 ^ 6次)
提前致谢!
【问题讨论】:
-
我会跳过
[][][]语法,只使用一个向量。元素[z*RES*RES+y*RES+x]将为您提供相当于[z][y][x]。
标签: c++ multidimensional-array struct heap-memory new-operator