C++ 为什么矩阵的内容实现为向量的向量不变?
我试图在一个在线编程挑战中旋转矩阵。我选择将矩阵实现为向量的向量,并执行转置并打印它。但我的问题是矩阵的内容在转置后没有改变。有人能告诉我我做错了什么吗?下面是我编写的代码。提前谢谢C++ 为什么矩阵的内容实现为向量的向量不变?,c++,matrix,vector,c++14,C++,Matrix,Vector,C++14,我试图在一个在线编程挑战中旋转矩阵。我选择将矩阵实现为向量的向量,并执行转置并打印它。但我的问题是矩阵的内容在转置后没有改变。有人能告诉我我做错了什么吗?下面是我编写的代码。提前谢谢 #include<iostream> #include<vector> #include<iomanip> // matrix dimension int const Dim {4}; auto Fill = [] (auto& mat) { auto c = 1
#include<iostream>
#include<vector>
#include<iomanip>
// matrix dimension
int const Dim {4};
auto Fill = [] (auto& mat)
{
auto c = 1;
for(auto i=0; i<Dim; ++i)
for(auto j=0; j<Dim; ++j)
mat[i][j] = c++;
};
auto Print = [] (auto const& mat)
{
for(auto i=0; i<Dim; ++i)
{
for(auto j=0; j<Dim; ++j)
std::cout << std::setw(3) << mat[i][j];
std::cout << "\n";
}
std::cout << "\n";
};
auto Transpose = [] (auto& mat)
{
for(auto i=0; i<Dim; ++i)
for(auto j=0; j<Dim; ++j)
std::swap(mat[i][j], mat[j][i]);
};
auto main()->int
{
std::vector<std::vector<int>> mat(Dim,
std::vector<int>(Dim));
Fill(mat);
cout << "Before Transpose: \n";
Print(mat);
Transpose(mat);
cout << "After Transpose: \n";
Print(mat);
return 0;
}
==================================
Output:
Before Transpose:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
After Transpose:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
#包括
#包括
#包括
//矩阵维数
int const Dim{4};
自动填充=[](自动填充(&mat)
{
自动c=1;
for(auto i=0;iYou交换数组元素两次。使用for(auto i=0;一个小矩阵,比如4x4(像你的一样),并在每次元素交换后打印i、j和矩阵本身(是的,在你的情况下是16次转储)正如拉比所描述的那样,这将清楚地表明事情从何而来。感谢拉比76指出我愚蠢的错误。