在3D矩阵中移动行和列

时间:2018-12-02 01:38:00

标签: c++ c++11 matrix

假定我在C ++中具有以下代码。我声明一个大小为3x3x4的矩阵,这意味着我有四个大小为3x3的2D矩阵。我想移动大3D矩阵的每个2D矩阵中的行和列。我使用了rotate函数,但它似乎仅在最后一个维度上起作用,即我可以在2D矩阵之间移动,而不能在2D矩阵内移动。有什么方法可以使用rotate通过标准C ++库移动第一维和第二维?

注意:我想实现的功能类似于circshift(A,K)函数在Matlab中的功能。

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{

 double test[3][3][4] = { { {1, 4, 7, 4}, {2, 5, 8, 4}, {3, 6, 9, 4} },
  { {1, 4, 7, 4}, {2, 5, 8, 4}, {3, 6, 9, 4} },
  { {1, 4, 7, 4}, {2, 5, 8, 4}, {3, 6, 9, 4} } };   

std::cout << "Matrix shifted" << std::endl;
for (uint16_t i = 0; i < 3; i++)
{
    for (uint16_t j = 0; j < 3; j++)
    {
        std::rotate(test[i][j], test[i][j] + 1, test[i][j] + 4);   
    }
}

}

0 个答案:

没有答案