gpt4 book ai didi

c++ - 如何在 Row Major Order 中声明 3D Array?

转载 作者:行者123 更新时间:2023-11-28 07:09:49 25 4
gpt4 key购买 nike

我编写了一个将二维数组存储为一维数组并重载索引运算符的类,如下所示:

inline T* operator [](const int Index) {return Data.get() + Height * Index;}

其中数据是 std::unique_ptr<int[]> .

这让我可以做:MyInstance[I][J]获取值作为行主要顺序和 MyInstance[J][I]获取值作为列主要顺序。

如何对 3D 阵列执行相同的操作?我试图弄清楚它是如何在内存中布局的,所以我做了:

int main()
{
//index = [i + width * (j + depth * k)];

const int width = 4, height = 4, depth = 4;

int l = 0;
int ptr[width][height][depth] = {0}; //Same as int ptr[width * height * depth]; ?
//int ptr[height][width][depth]??


for (int i = 0; i < depth; ++i) //i < ??
{
for (int j = 0; j < height; ++j) //j < ??
{
for (int k = 0; k < width; ++k) //k < ??
{
ptr[i][j][k] = l++;
}
}
}

int* p = &ptr[0][0][0];

for (int i = 0; i < depth; ++i)
{
for (int j = 0; j < height; ++j)
{
for (int k = 0; k < width; ++k)
{
std::cout<<p[i + width * (j + depth * k)]<<"\n";
}
}
}

return 0;
}

但是,它没有以正确的顺序打印。它似乎以随机顺序或列主要顺序打印。

我不确定如何声明数组:

int arr[depth][height][width];
int arr[width][height][depth];
int arr[height][width][depth];
int arr[depth][width][height];
int arr[height][depth][width];
int arr[width][depth][height];

有什么想法吗?

最佳答案

有点像

std::vector< std::vector< std::vector<int> > > arr;

访问将是

int arr[depth][height][width];

因为每个 [] 运算符都返回具有重载的 [] 运算符的 vector

关于c++ - 如何在 Row Major Order 中声明 3D Array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com