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指出我愚蠢的错误。