我有一个包含
之类的向量{1, 2, 1, 4, 5, 1, 7, 8 ,9, 1 }
因此,向量表示右上矩阵的列
1 2 4 7
0 1 5 8
0 0 1 9
0 0 0 1
我如何使用矢量并从
获取{1, 2, 1, 4, 5, 1, 7, 8 ,9, 1 }
到
1 2 4 7
2 1 5 8
4 5 1 9
7 8 9 1
作为载体
{ 1,2,4,7,
2,1,5,8,
4,5,1,9,
7,8,9,1 }
实际上在查看代码之后,解决方案是:
for (int i = 0; i < cols; ++i)
for (int j = 0; j <= i; ++j)
v[cols * i + j] = v[cols * j + i] = w[k++];
答案 0 :(得分:3)
int k=0;
for(int i = 0; i<4; ++i)
for(int j = 0; j<=i; ++j)
v[i][j]=v[j][i]=w[k++];
假设源向量是w,dest是v。
如果它应该是1D而不是2D,那么[i][j]
应该更改为[4*i+j]
。
修改强> 这可以“就地”完成,但这有点棘手。为了不覆盖您尚未使用的值,您必须向后循环并进行两次传递:
int k=10;
for(int i = 3; i >=0; --i)
for(int j = i; j >= 0; --j)
v[4*i+j]=v[--k];
for(int i = 0; i < 4; ++i)
for(int j = 0; j < i; ++j)
v[4*j+i]=v[4*i+j];