C++ 变换右上角三角形矩阵,给定C++;

C++ 变换右上角三角形矩阵,给定C++;,c++,matrix,C++,Matrix,我有一个向量,包含如下内容 {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 } 事实上,在审查代码后,解决方案是: for (int i = 0; i < cols

我有一个向量,包含如下内容

{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 }
事实上,在审查代码后,解决方案是:

for (int i = 0; i < cols; ++i)
    for (int j = 0; j <= i; ++j)
        v[cols * i + j] = v[cols * j + i] = w[k++];
for(int i=0;i对于(int j=0;j)您是想将条目复制到另一个容器中,还是随机访问?好吧,获取表示完整矩阵的向量,如:
{1,2,4,7,2,1,5,8,4,5,1,9,7,8,9,1}
如果不使用2个向量,是否可以这样做,我的意思是只使用源向量,猜对了吗?@cMinor是的,但您必须调整源向量的大小。第二个解决方案效果很好,但第一个,我得到了不同的结果,我按照您的建议更改了(int I=1;Ifor (int i = 0; i < cols; ++i) for (int j = 0; j <= i; ++j) v[cols * i + j] = v[cols * j + i] = w[k++];
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++];
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];