我有一个控制台应用程序,我试图从数字输入创建一个二进制矩阵。
如果想要创建一个 2x4 矩阵,我必须做两个输入,每一行一个。输入(控制台)将如下所示:
第一个输入:
1101
第二个输入:
0111
然后我想创建一个如下所示的矩阵:
{
1,1,0,1
0,1,1,1
}
当用户打字时1101
在控制台中,数字应该被分割成数字,每个数字将存储在列中的不同索引中。假设用户仅输入数字1和0。稍后我将为此添加一个测试。
我所有的尝试都是以错误的格式创建矩阵,因此当我尝试读取矩阵中的数据时,我会得到错误的结果。
到目前为止,这是我的尝试:
询问用户矩阵大小的构造函数
Matrix::Matrix() {
std::cout << "Enter size of matrix:" << std::endl;
std::cout << "Rows: ";
std::cin >> rows;
std::cout << "Columns: ";
std::cin >> cols;
int EndX = rows;
int EndY = cols;
vect3 = CreateMatrix(rows); //This method is supposed to create the matrix
}
创建矩阵方法:
std::vector<std::vector<int>> Matrix::CreateMatrix(int row) {
std::string number{};
for (size_t i = 0; i < row; i++) {
std::cout << "Enter row number " << i << ":" << std::endl;
std::cin >> number;
for (size_t i = 0; i < number.length(); i++)
vect2.push_back(number[i] - '0');
std::reverse(vect2.begin(), vect2.end());
vect.emplace_back(std::move(vect2));
}
return vect;
}
CreateMatrix 函数没有创建我想要创建的所需矩阵,但我无法弄清楚我做错了什么。
当我稍后在代码中进行此测试时
if (vect[row][col]) {
// Some code
}
这些数字在矩阵中的位置错误,所以我在这个测试中,当预期为假时,我评估为真,反之亦然。
如果我要使用上面的示例在堆栈上手动创建数组,它将如下所示:
int matrix[2][4]{
{1,1,0,1},
{0,1,1,1}
};
如果我现在做这个测试:
if (matrix[row][col]) {
// Some code
}
该表达式按预期评估为 true 和 false。
所以当我尝试通过自定义输入动态创建矩阵时,矩阵没有正确的格式,即数字位于错误的索引中。
问题在于std::vector<std::vector<int>> Matrix::CreateMatrix(int row)
方法,但我不知道我做错了什么,所以任何帮助将不胜感激。
Thanks!
矩阵.h:
class Matrix {
public:
Matrix();
std::vector<std::vector<int>> CreateMatrix(int);
std::vector<std::vector<int>> getMatrix()const;; //Returns vect3
~Matrix();
private:
std::vector<std::vector<int>> vect{0};
std::vector<int> vect2{0};
std::vector<std::vector<int>> vect3{0};
};
Edit:
gtMetrix:
std::vector<std::vector<int>> Matrix::getMatrix() const { return vect3; }
Testing:
Matrix matrixClass;
std::vector<std::vector<int>> matrix = matrixClass.getMatrix(); //Returns vect3 from the Matrix class
if (matrix[1][0]) //Should print false but prints true
std::cout << "true\n";
else
std::cout << "false\n";
int matrixxx[2][4]{
{1,1,0,1},
{0,1,1,1}
};
if (matrixxx[1][0]) //prints false
std::cout << "true\n";
else
std::cout << "false\n";
std::cin.get();
std::cin.get();
return 0;
给出与上述相同的矩阵:
{
1,1,0,1
0,1,1,1
}
名字matrix
是我尝试通过用户输入创建的矩阵。
当我测试索引处的数字时[1][0]
程序应该打印false
因为该索引处的数字是 0。但是程序正在打印true
这意味着在某种程度上,该索引处有一个 1,尽管它不应该是。
我第二次尝试在堆栈上手动创建一个矩阵,我称之为matrixxx
当我现在尝试访问索引处的这个矩阵数时[1][0]
程序打印false
正如预期的那样。