Спроектировать 2-мерную разреженную бесконечную матрицу, заполненную значениями по умолчанию.
Матрица должна хранить только занятые элементы - значения которых хотя бы раз
присваивались.
Присвоение в ячейку значения по умолчанию освобождает ячейку.
Необходимо уметь отвечать на вопрос - сколько ячеек реально занято?
Необходимо уметь проходить по всем занятым ячейкам. Порядок не имеет значения. Возвращается
позиция ячейки и ее значение.
При чтении элемента из свободной ячейки возвращать значение по умолчанию.
При запуске программы необходимо создать матрицу с пустым значением 0, заполнить главную
диагональ матрицы (от [0,0] до [9,9]) значениями от 0 до 9.
Второстепенную диагональ (от [0,9] до [9,0]) значениями от 9 до 0.
Необходимо вывести фрагмент матрицы от [1,1] до [8,8].
Между столбцами пробел.
Каждая строка матрицы на новой строке консоли.
Вывести количество занятых ячеек.
Вывести все занятые ячейки вместе со своими позициями.
Опционально реализовать N-мерную матрицу.
Опционально реализовать каноническую форму оператора =
, допускающую выражения
Matrix<int , -1 > matrix;
((matrix[100 ][100 ] = 314 ) = 0 ) = 217 ;
Matrix<int , -1 > matrix;
assert (matrix.size() == 0);
auto a = matrix[0 ][0 ];
assert (a == -1 );
assert (matrix.size() == 0);
matrix[100 ][100 ] = 314 ;
assert (matrix[100 ][100 ] == 314 );
assert (matrix.size() == 1);
// print one line
// 100100314
for (auto c: matrix)
{
for (auto value: c)
{
std::cout << value;
}
std::cout << std::endl;
}
// Operator's `=` canonical from
((matrix[100 ][100 ] = 314 ) = 0 ) = 217 ;
// print one line
// 100100217
for (auto c: matrix)
{
for (auto value: c)
{
std::cout << value;
}
std::cout << std::endl;
}
// N-arn matrix (N = 7)
matrix[1000 ][999 ][998 ][997 ][996 ][995 ][994 ] = 7777 ;
// print one line
// 1000 999 998 997 996 995 994 7777
for (auto c: matrix)
{
for (auto value: c)
{
std::cout << value << ' ' ;
}
std::cout << std::endl;
}
индексация оператором []
количество занятых ячеек должно быть 18 после выполнения примера выше
Задание считается выполненным успешно, если после анализа кода, установки пакета и запуска
приложения появился фрагмент матрицы, количество ячеек и список всех значений с позициями.
mkdir build
cd build
cmake ../
cmake --build . --config Release|Debug
Run tests (GTest & BoostTest)
cmake --build . --target test --config Release|Debug
cmake --build . --target RUN_TESTS --config Release|Debug
apt update && apt install -y matrix-0.0.X-Linux.deb
./matrix
unzip matrix-0.0.X-win(64|32).zip
matrix.exe