gpt4 book ai didi

c++ - 给定 C++ 中的列变换右上三角矩阵

转载 作者:太空狗 更新时间:2023-10-29 21:28:27 25 4
gpt4 key购买 nike

我有一个 vector 包含类似的东西

{1,  2, 1,  4, 5, 1,  7, 8 ,9, 1 }

所以 vector 表示右上矩阵的列

  1 2 4 7
0 1 5 8
0 0 1 9
0 0 0 1

我如何使用 vector 并从中获取

{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++];

最佳答案

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++];

假设源 vector 是w,dest是v。

如果它应该是一维的,而不是二维的,那么 [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];

关于c++ - 给定 C++ 中的列变换右上三角矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6942745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com