我想在C ++中创建一个循环,它添加两个矩阵,其中第一个存储为行主要,第二个存储为列主要。但我不确定指数之间的数学关系是什么。我尝试用3x3矩阵。在这种情况下,索引的排列看起来像这样:
0 1 2 3 4 5 6 7 8
0 3 6 1 4 7 2 5 8
我可以在迭代时以封闭的形式写这个:
A[i]+B[f(i)]
答案 0 :(得分:2)
首先,以下是确凿的公式:
f(i) = 3 * (i % 3) + (i / 3);
这里i
被视为第一矩阵的迭代索引,其作为行主要存储,索引的对应位置是(i / 3, i % 3)
。
因此,第二个矩阵(作为列专业存储)的相应位置是交换行和列号的(i % 3, i / 3)
。
作为Index = 3 * row + column
,总之,第二个矩阵的迭代索引(f(i)
表示为3 * (i % 3) + (i / 3)
。
答案 1 :(得分:1)
如果第一个矩阵中的行数是 r 且列数是 c ,那么
f(i) = i / r + i % c * r
我正在利用第一个词的整数除法,%
的关联性和*
从左到右第二学期(%
和*
具有相同的优先级)。
答案 2 :(得分:1)
显式计算indeces排列公式的另一种方法是考虑属于列主要存储矩阵中同一行的元素的距离:
UIApplication
这可能比计算整数除法提醒和每个索引值的乘法更快。