假定我在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);
}
}
}