Study with Me! 2024. 5. 2. 21:45

선형대수를 복습하며 C++ 클래스로 만들어보려고 한다. (코드의 효율은 일단 좀 미뤄두고....)

행렬

: 수 또는 문자들을 행과 열을 갖는 직사각형 모양으로 나열하여 묶어둔 것

위 행렬은 m X n 크기의 행렬이다.

원소 Amn는 m행 n열의 값을 나타낸다.


C++로 구현하기

Matrix라는 클래스로 행렬을 구현했다.

생성자 파라미터로 배열의 크기를 전달받고 생성자에서 배열 크기에 맞는 2차원 배열을 동적할당 및 원소 값 입력을 받는다.

 

아래와 같은 main() 함수로 행렬을 생성 및 출력해보자.

#include <iostream>

#include "matrix.h"

using namespace std;

int main() {
    Matrix m1(3, 3);
    Matrix m2(3, 2);

    m1.print();
    m2.print();

    return 0;
}

클래스 코드는 아래와 같다. (이번까지는 처음이니 전체 코드를 올리지만 다음부터는 수정된 부분만 올릴 예정, 전체 코드는 아래 깃허브)

#ifndef __MATRIX_H__
#define __MATRIX_H__

#include <iostream>

class Matrix {
    int **mat;
    int row;
    int col;

public:
    Matrix(int row, int col) : row(row), col(col) {
        mat = (int **)malloc(sizeof(int *) * row);
        for (int i = 0; i < row; i++)
            mat[i] = (int *)malloc(sizeof(int) * col);

        printf("[ %d X %d Matrix ]\n", row, col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++)
                scanf("%d", &mat[i][j]);
        }
        printf("\n");
    }
    ~Matrix() {
        for (int i = 0; i < row; i++)
            free(mat[i]);
        free(mat);
    }

    int getRow() { return row; }
    int getCol() { return col; }

    // 행렬 출력
    void print() {
        printf("= %d X %d Matrix =\n", row, col);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (j == 0) {
                    if (i == 0) printf("┌ ");
                    else if (i == row - 1) printf("└ ");
                    else printf("│ ");
                }
                printf("%d ", mat[i][j]);
                if (j == col - 1) {
                    if (i == 0) printf("┐\n");
                    else if (i == row - 1) printf("┘\n");
                    else printf("│\n");
                }
            }
        }
        printf("\n");
    }
};

#endif

깃허브 이미지 링크