Проблем с четенето на 2D масив - 01. Compare Matrices
#include<iostream>
#include <vector>
using namespace std;
bool isEqual = -1;
int main()
{
int first2DArrayRows = 0;
int first2DArrayCols = 0;
int second2DArrayRows = 0;
int second2DArrayCols = 0;
cin >> first2DArrayRows >> first2DArrayCols;
vector< vector<int> > first2DArray(first2DArrayRows, vector<int>(first2DArrayCols));
for(int row = 0; row < first2DArrayRows; ++row)
for(int col = 0; col < first2DArrayCols; ++col)
{
cin >> first2DArray[row][col];
first2DArray[row].push_back(col);
}
cin >> second2DArrayRows >> second2DArrayCols;
vector< vector<int> > second2DArray(second2DArrayRows, vector<int>(second2DArrayCols));
for(int row = 0; row < second2DArrayRows; ++row)
for (int col = 0; col < second2DArrayCols; ++col)
{
cin >> second2DArray[row][col];
second2DArray[row].push_back(col);
}
if(first2DArray != second2DArray)
isEqual = 0;
else
isEqual = 1;
if(isEqual)
cout << "equal" << endl;
else
cout << "not equal" << endl;
return 0;
}
От вчера се мъча да разгадая защо не ми ги чете като хората. Гледах пак лекцията, гледах демата, четох форуми и не схващам какво не е наред.
Не се бях сетил, че мога да използвам по-малко променливи. Също така незнаех, че може да се реши с вектор от стрингове. Не разбирам причината за проверката if(rows==V.size()) данеби условието на задачата да има предвид, че масивите са еднакви? Но само пише "two integer matrices (2D arrays) from the console" не пише two equal. Аз мислех че дължината им може да варира. И накрая начина по който изчисляваш дали са равни (V == V2? "equal":"not equal") предполагам, че по този начин казваш на cout сам да си ги сравни и реши кое да принтира? Благодаря за обяснението.
Понеже input-а изглежда така:
rows за матрица 1
после ни въвеждат матрица 1
rows за матрица 2
после ни въвеждат матрица 2
Ако rows за матрица 1 и rows за матрица 2 се различават, то нама как матрица 1 и матрица 2 да са еднакви.
Понеже вече съм въвел матрица 1 и знам колко реда има тя, то мога да преизползвам rows променливата. После проверявам дали V.size() (rows за матрица 1) == rows ( нововъведения брой на редовете за матрица 2). Ако те не са равни, то няма смисъл да се въвежда матрица 2, защото ние вече знаем че те ще се различават поне с един цял ред.
(V == V2? "equal":"not equal") представлява така наречения Ternary operator.
Basically ако матрица 1 е равна на матрица 2(?) тогава "equal", иначе(:) "not equal". Това всичкото e еквивалентно на:
Аха. Ясно. Така се затвърждава логиката без да се правят прекалено много проверки и да се разширява кода. Nice!