是否可以将某些功能作为memcpy从1D阵列复制到3D?

现在我正在使用一种缓慢的方法:

for(int loop1 = 0; loop1 < numberAgents; loop1++)
    for(int loop2 = 0; loop2 < fieldWidth; loop2++)
        for(int loop3 = 0; loop3 < fieldWidth; loop3++)
            potentialField[loop1][loop2][loop3] = cpuPotentialField[loop1 * fieldWidth * fieldWidth + loop2 * fieldWidth + loop3];

这不起作用:
memPotentialField = numberAgents * fieldWidth * fieldWidth * sizeof(float);
memcpy(potentialField, cpuPotentialField, memPotentialField);

最佳答案

多维数组按行存储(第8.3.4 / 9节),因此本质上您使用memcpy的方法很好(因为浮点数是POD)。

memcpy(&potentialField[0][0][0], cpuPotentialField,
       sizeof(potentialField)/sizeof(***potentialField));

使用std::copy更好,因为它也适用于非PODS。所以我会写
std::copy(&potentialField[0][0][0],
          &potentialField[0][0][0] + sizeof(potentialField)/sizeof(potentialField[0][0][0]),
          cpuPotentialField);

关于c++ - 快速将1D阵列复制到cpp中的3D阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13556075/

10-13 09:46