Нередко в качестве задания для начинающих C++-программистов предлагается написать функцию умножения двух матриц.
Ниже представлена программа, которая демонстрирует такую функцию. Используемый в программе перегруженный оператор
operator <<, естественно не предназначен для вывода массивов любых чисел. В программе он используется для простоты демонстрации функции. Вам самим нужно будет обеспечивать вывод массивов на консоль в зависимости от типов и величин элементов массивов. Тем не менее приведенный в программе оператор
operator << может быть взят за основу при написании вами вашего собственного перегруженного оператора.
#include <iostream>
#include <iomanip>
template <typename T, size_t N1, size_t N2, size_t N3>
void multiply_matrices( const T ( &a1 )[N1][N2],
const T ( &a2 )[N2][N3],
T ( &a3 )[N1][N3] )
{
for ( size_t i = 0; i < N1; i++ )
{
for ( size_t j = 0; j < N3; j++ )
{
a3[j] = 0;
for ( size_t k = 0; k < N2; k++ )
{
a3[j] += a1[k] * a2[k][j];
}
}
}
}
template <typename T, size_t N1, size_t N2>
std::ostream & operator <<( std::ostream &os, const T ( &a )[N1][N2] )
{
for ( const auto &row : a )
{
for ( const auto &item : row )
{
os << std::setw( 3 ) << item << ' ';
}
os << '\n';
}
return os;
}
int main()
{
const size_t N1 = 2;
const size_t N2 = 3;
const size_t N3 = 4;
int a1[N1][N2] =
{
{ 3, 9, 7 },
{ 1, 5, 4 }
};
int a2[N2][N3] =
{
{ 6, 2, 8, 1 },
{ 3, 9, 4, 0 },
{ 5, 3, 1, 3 }
};
int a3[N1][N3];
std::cout << a1 << '\n';
std::cout << a2 << '\n';
multiply_matrices( a1, a2, a3 );
std::cout << a3 << '\n';
return 0;
}
Вывод программы на консоль:
3 9 7
1 5 4
6 2 8 1
3 9 4 0
5 3 1 3
80 108 67 24
41 59 32 13