首页 > 解决方案 > 如何使用 C++ 更改多维数组的内存布局

问题描述

假设我有一个A形状为 (H, W, C) 的 3d 数组,并且存储它们的内存是连续的,从*p*(p + H*W*C)。我想将存储此数组的内存布局更改为(C,H,W),这意味着A[h][w][c]可以使用B[c][h][w].

一种愚蠢的方法是这样的:

char* B = new char[H*W*C];
for (int h{0}; h < H; ++h) {
    for (int w{0}; w < W; ++w) {
        for (int c{0}; c < C; ++c) {
            int idx_old = h * H * C + w * C + c;
            int idx_new = c * H * W + h * W + w;
            B[idx_new] = A[idx_old];
        }
    }
}

是否有任何 c++ 内置函数可以做到这一点?或者请用 c++ 最快的方法是什么?

标签: c++arraysmatrixmemory

解决方案


推荐阅读