코린이의 뻘코드 2

#include <iostream>
#include <array>

#define ARRAY std::array

template <class T, std::size_t size>
using Matrix = ARRAY<ARRAY<T, size>, size>;

template <class T, std::size_t size>
auto clockwise_rotate(const Matrix<T, size>& arg)
{
  Matrix<T, size> m;
  
  for (auto i = 0; i < size * size; ++i)
    m[i / size][i % size] = arg[size - 1 - i % size][i / size];

  return m;
}

template <class T, std::size_t size>
void print_matrix(const Matrix<T, size>& arg)
{
    for (const auto& i : arg)
    {
        for (const auto& j : i)
            std::cout << j << " ";
        std::cout << "\n";
    }
}

int main() 
{
    Matrix<int, 3> m { ARRAY<int, 3>{1, 2, 3}, 
                       ARRAY<int, 3>{4, 5, 6},
                       ARRAY<int, 3>{7, 8, 9} };
    
    print_matrix(clockwise_rotate(m));

    return 0;
}

너무 심심헤서 만드러 밧써요.
코드 좀 신랄하게 까주세요

2 Likes

보단

using std::array;

가 낫지 않을까요?

이 부분은 이중 for문을 쓰는 게 더 낫지 않을까… 싶네요.

for (const auto& i : args) { ... }가 낫지 않을까요? j에 대해서도 마찬가지고요.

지금까지 (리뷰어의 실력이 부족한) 코드리뷰였읍니다.

2 Likes

그런데 코린이의 뻘코드 1은 어디에 있나요? 궁금

1 Like

넘 부끄부끄 :sweat_smile:

1 Like

이걸 내버려 두고 전처리기를 대체 무슨 생각으로 썼지ㅋㅋㅋㅋㅋㅋㅋㅋ 다시 생각해도 어이 없네요 ㅠㅠ :pensive:

1 Like

인자가 Matrix 인데 왜 중언부언유?

2 Likes

C++ 은 parameter type 을 통한 다형성을 지원하기 때문에,

매개변수 까지가 함수명이라고 봐도 무방하니깐유.

기술할 필요없는 것을 기술하지 않게 하자

2 Likes

매개변수도 함수명 …
메모해 두겠읍니다

병렬딸로 돌린 후 행렬곱을 계산해 캐시 최적화를 노린다…

그거 괜찮네유:heart:

실제로 머신러닝 프레임워크에서 행렬곱할때 캐시미스 줄이기 위해 A x B = C에서 B를 transpose 합니다

2 Likes

TC++PL 29장 보면 N차원 행렬 클래스 만드는 법 나와있습니다. C++11기준이라 SFINAE 똥꼬쑈가 심하긴 한데 볼만합니다

숫자 계산 행렬은 eigen/Matrix.h at master · PX4/eigen · GitHub

1 Like

이 글도 재밌읍니다