bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

行列のテンプレートクラス

早寝早起きにしないと。ここ最近は昼前に起きる生活なので大変まずい。
どうも上手く書けないが、手探りで書いた。
手探りで試行錯誤している段階が、プログラムで一番楽しい。

C++ テンプレート完全ガイド (Programmer’s SELECTION)

C++ テンプレート完全ガイド (Programmer’s SELECTION)

C++テンプレートテクニック 第2版

C++テンプレートテクニック 第2版


下記はMatrix.hです。

// Matrix.h

#ifndef __MATRIX_H__
#define __MATRIX_H__

#include <iostream>

// 行列テンプレート
template<int M, int N, typename T>
class TMatrix
{
private:
	T elements[M][N];
public:
	TMatrix( T (*array)[N] )
	{
		for( int i = 0; i < M; ++i )
			for( int j = 0; j < N; ++j )
				elements[i][j] = array[i][j];
	}

	~TMatrix()
	{ }

	T GetMatrix( int index_1, int index_2 );
	void Disp();
};

template<int M, int N, typename T> T TMatrix<M, N, T>::GetMatrix( int index_1, int index_2 )
{
	return elements[index_1][index_2];
}


template<int M, int N, typename T> void TMatrix<M, N, T>::Disp()
{
	for( int i = 0; i < M; ++i )
	{
		for( int j = 0; j < N; ++j )
			std::cout << elements[i][j] << " ";
		std::cout << std::endl;
	}
}

#endif	// __MATRIX_H__

そして、main.cppで表示させる。

// main.cpp

#include "Matrix.h"

int main()
{
	
	int array[2][2] = { { 1, 0 }, { 0, 1 } };
	TMatrix<2, 2, int> a( array );
	a.Disp();

	std::cout << std::endl;

	for( int i = 0; i < 2; ++i )
	{
		for( int j = 0; j < 2; ++j )
			std::cout << a.GetMatrix( i, j ) << " ";
		std::cout << std::endl;
	}

	return 0;
}