C:聪明地"移动"矩阵?

fi_*_*4k7 5 c matrix shift

我有一个整数矩阵,应该像一个缓冲区:

x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};

现在,如果我添加一个新行{3, 3, 3, 3, 3},新矩阵应如下所示:

x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};

有没有一种巧妙的方法可以在不复制所有元素的情况下做到这一点?

mik*_*obi 8

如果您的矩阵被定义为a int **并且您单独分配每一行,那么您只需要交换行指针.


rus*_*lik 6

模数运算怎么样?

如果您访问元素,matrix[x + SZ * y] 您可以将其更改为:

matrix[x + SZ * ((y + FIRST_ROW) % SZ)] .

通过这种方式来实现这种转换,你只需将新行{3,3,3 ..}放在行{0,0,0}所在的位置,然后将FIRST_ROW计数器递增以指向新的起始行.