像Matlab一样在C ++中分配数组?

时间:2014-06-26 05:24:05

标签: c++ arrays matlab matrix cuda

所以在MATLAB中,如果我创建一个N x N x N x N x 6维矩阵,我可以将这些值分配给6个为一组的矩阵:

myMatrix(1,1,1,1,:) = [69, 3, 864, 21, 95, 20];

是否有一种类似的方式在6个字母组中用C ++写入N x N x N x N x 6维矩阵?

另外,是否有类似的方法将6个元素设置为等于另外6个元素I.eArray(N,N,N,8,:) = myArray(N,N,N,6,:)?

(没有std :: vector解决方案 - 需要保持矩阵的数组形式,因为现有代码是使用c++/CUDA为数组构建的,并且非常复杂)

2 个答案:

答案 0 :(得分:1)

#include <algorithm>,您可以使用std::copy

int myMatrix[N][N][N][N][6];
const int src[6] = {69, 3, 864, 21, 95, 20};

std::copy(std::begin(src), std::end(src), myMatrix[0][0][0][0]);

所以等同于myArray(N,N,N,8,:) = myArray(N,N,N,6,:)将是:

std::copy(std::begin(myMatrix[N-1][N-1][N-1][5]),  // Source start
          std::end(myMatrix[N-1][N-1][N-1][5]),    // Source end
          std::begin(myMatrix[N-1][N-1][N-1][7])); // Dest start

请注意,C / C ++中的索引从0开始,而不是1

答案 1 :(得分:0)

您可以像在matlab中一样分配: 假设你有一个向量:

std::vector<std::vector<std::vector<std::vector<std::vector<int>>>>>> myVector;

假设它已经像这样正确初始化:

myVector(N, std::vector<std::vector<std::vector<std::vector<int>(N, std::vector<std::vector<std::vector<int>(N, std::vector<std::vector<int>(N, std::vector<int>(6, 0)))));

毛。尝试以不同方式执行或使用push_back,这样才有意义。

但是,无论如何,你可以分配最低级别的矢量:

std::vector<int> yourTempVector(6, someNumber);
myVector[1][1][1][1] = yourTempVector;