c++ - 如何修复无法正确执行 3x2 和 4x3 矩阵的转置函数?
问题描述
我的转置函数擅长转置方阵时遇到了麻烦;但是,当它是一个矩形时,它做得很糟糕。它只是在转置后不会为某些元素创建一个新列,我不确定如何解决这个问题。我试过改变循环无济于事。我正在考虑改变显示功能,但我觉得这会导致一些问题。
#include <iostream>
#include <vector>
class Matrix
{
public:
Matrix();
void transpose(int &numRows, int &numCols);
void fill2dArray(int &numRows, int &numCols);
void display2dArray(int &numRows, int &numCols) const;
private:
static const int ROW_MAX = 10, COL_MAX = 10;
double data[ROW_MAX][COL_MAX];
};
Matrix::Matrix()
{
data[10][10] = {};
}
void Matrix::transpose(int &numRows, int &numCols)
{
for (int r=0; r<numRows; ++r)
{
for (int c=0; c<numCols; ++c)
{
if (r < c)
{
std::swap(data[r][c],data[c][r]);
}
}
}
}
void Matrix::display2dArray(int &numRows, int &numCols) const
{
for (int r=0; r<numRows; ++r)
{
for (int c=0; c<numCols; ++c)
{
std::cout << " " << data[r][c] << " ";
}
std::cout << std::endl;
}
}
void Matrix::fill2dArray(int &numRows, int &numCols)
{
for (int r=0; r<numRows; ++r)
{
std::cout << "Enter " << numCols << " values for row #" << r << std::endl;
for (int c = 0; c < numCols; ++c)
{
std::cin >> data[r][c];
}
std::cout << std::endl;
}
}
int main()
{
std::cout << "You may enter up to 10 rows and 10 columns of numbers." << std::endl;
std::cout << "\n How many rows? ";
int numRows;
std::cin >> numRows;
std::cout << "How many columns? ";
int numCols;
std::cin >> numCols;
std::cout << std::endl;
Matrix matrix;
matrix.fill2dArray(numRows,numCols);
std::cout << "Contents of the " << numRows << " x " << numCols << " array:" << std::endl;
matrix.display2dArray(numRows,numCols);
std::cout << "\nAfter transpose" << std::endl;
matrix.transpose(numRows, numCols);
matrix.display2dArray(numRows, numCols);
}
解决方案
推荐阅读
- google-apps-script - 用于检索版本控制的 Google App 脚本
- vba - 子表单更新另一个子表单日期
- google-cloud-platform - Google Cloud Translate API 翻译返回 html 转义文本
- javascript - 将对象转换为二维数组但删除键
- php - 获取自定义帖子类型数据,包括 ACF 和 Timber?
- python - 读取数据框并转换为文本文件
- selenium - 如何使用 CTRL + S 使用 Selenium IDE 保存网页?
- docker - 找不到 docker-compose 正在运行
- java - 如何在 sqLite 中修复:无法从 CursorWindow 读取第 0 行第 0 列。确保在从光标访问数据之前正确初始化光标
- amazon-redshift - 在 Redshift 中控制 DELETE