c++ - 如何使用 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++ 最快的方法是什么?
解决方案
推荐阅读
- android - 缺少必需的参数“名称”并且没有 android:defaultValue
- php - Doctrine COALESCE、SUM 和 Subtract 导致语法错误:预期的 Doctrine\ORM\Query\Lexer::T_FROM, got '-'
- java - 使用 java 在 apche_beam 中编写 tfrecords
- scala - 如何使用 Kafka、Alpakka Kafka、Play Framework 和 Websocket 处理 POST 请求?
- php - 在大型数据输入期间防止 sqlite3_php 数据库锁定的最佳实践?
- java - 链接选项
- java - 使用带有抽象类的 lombok builder
- php - 如何在 phpunit 测试中期望 diff() 方法?
- javascript - 任何人都有使用 Javascript 老式 winamp 嵌入播放器的经验吗?
- opentok - 是否可以使用默认嵌入设置音频聊天和视频聊天?