Предположим, что у меня есть следующий кусок кода на C ++.Я объявляю матрицу размером 3x3x4, что означает, что у меня есть четыре 2D матрицы размером 3x3.Я хочу сместить строки и столбцы в каждой 2D-матрице большой 3D-матрицы.Я использовал функцию rotate
, но, похоже, она работает только в последнем измерении, т.е. я могу переключаться между 2D-матрицами, но не внутри 2D-матриц.Есть ли способ использовать rotate
для смещения 1-го и 2-го измерений с использованием стандартных библиотек 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);
}
}
}