У меня есть консольное приложение, в котором я пытаюсь создать двоичную матрицу из числового ввода.
Если вы хотите создать матрицу 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
}
Метод CreateMatrix:
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
}
Выражение оценивается как истинное и ложное, как и ожидалось.
Поэтому, когда я пытаюсь создать матрицу динамически с помощью пользовательского ввода, матрица не имеет правильного формата, то есть числа находятся в неправильных индексах.
Проблема в методе std::vector<std::vector<int>> Matrix::CreateMatrix(int row)
, но я не могу понять, что я делаю неправильно, поэтому любая помощь будет оценена.
Спасибо!
Matrix.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:
getMatrix:
std::vector<std::vector<int>> Matrix::getMatrix() const { return vect3; }
Тестирование:
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
, как и ожидалось.