【问题标题】:Transpose of a 2D matrix using vectors in C++ [closed]使用 C++ 中的向量转置二维矩阵 [关闭]
【发布时间】:2018-09-01 20:19:33
【问题描述】:

我正在尝试使用向量找出二维矩阵的转置。以下代码对我不起作用。我正在尝试将矩阵传递给名为 transpose() 的函数。我还有什么其他方法可以做到这一点?如果您指出我的错误,我将不胜感激。

#include <iostream>
#include <vector>
using namespace std;

void transpose(vector<vector<int> > &b)
{
    vector<vector<int> > trans_vec;

    for(int i=0;i<b.size();i++)
    {
        for(int j=0;j<b[i].size();j++)
        {
            trans_vec[j][i]=b[i][j];
        }
    }
}

int main()
{
    vector<vector<int> > v1;
    for(int i=0;i<2;i++)
    {
        vector<int> temp;
        for(int j=0;j<3;j++)
        {
            temp.push_back(i);
        }
        v1.push_back(temp);
    }
    //Display output
    for(int i=0;i<v1.size();i++)
    {
        for(int j=0;j<v1[i].size();j++)
        {
            cout<<v1[i][j];
        }
        cout<<endl;
    }
    transpose(v1);
    //display transposed matrix
    for(int i=0;i<v1.size();i++)
    {
        for(int j=0;j<v1[i].size();j++)
        {
            cout<<v1[i][j];
        }
        cout<<endl;
    }
    return 0;
}

【问题讨论】:

标签: c++ matrix vector


【解决方案1】:

您将保持传入的参数不变。这就是为什么你看不到任何变化。 此外,您正在访问无效索引,因此请使用正确的大小初始化向量。试试这个:

void transpose(vector<vector<int> > &b)
{
    if (b.size() == 0)
        return;

    vector<vector<int> > trans_vec(b[0].size(), vector<int>());

    for (int i = 0; i < b.size(); i++)
    {
        for (int j = 0; j < b[i].size(); j++)
        {
            trans_vec[j].push_back(b[i][j]);
        }
    }

    b = trans_vec;    // <--- reassign here
}

这会将向量初始化为第一行中的正确大小。 当然,这只适用于 b[0].size() == b[1].size() == ... == b[n].size()。

如果你不想使用 push_back,你可以这样写:

    for (int j = 0; j < b[i].size(); j++)
    {
        if (trans_vec[j].size() != b.size())
            trans_vec[j].resize(b.size());
        trans_vec[j][i] = b[i][j];
    }

另一种返回结果的方法是在函数末尾返回 trans_vec 并将 b 作为 const 引用传入:

vector<vector<int> > transpose(const vector<vector<int> > &b)
{
     ...
     return trans_vec;
}

【讨论】:

  • 我已经进行了必要的更改。但是我的代码在函数 transpose() 中声明 tran_vec 的大小时卡住了
  • 当然,编辑了我的答案:)
  • 非常感谢:)。只是一个快速的问题。 b[0].size 有什么作用?
  • b[0].size() 是 b 中第一个向量(行)的大小(条目数)。由于我们正在转置矩阵,因此结果矩阵的行数必须等于输入矩阵的列数 (b) :) 希望这是有道理的。
  • 如果您正在寻找我的答案,请务必将我的答案标记为已接受 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2011-07-20
  • 2012-01-22
相关资源
最近更新 更多