プログラムの高速化について語る
■ このスレッドは過去ログ倉庫に格納されています
0206妄想君
NGNGmatrix<T> &matrix<T>::operator = (const matrix<T> &m) // 行列 =行列
{
assert((m_row == m.m_row) && (m_col == m.m_col));
if (&m != this) {
if (m_row == 0 && m_col == 0) SetSize(m.m_row, m.m_col);
int n = m_row*m_col;
T *p1 = m_pMatrix, *p2 = m.m_pMatrix;
for (int i = 0; i < n; i++, p1++, p2++) *p1 = *p2;
}
return *this;
}
template<typename T>
matrix<T> operator * (const matrix<T> &m1, const matrix<T> &m2) // 行列×行列
{
int row1 = m1.GetRow(), col1 = m1.GetCol(), row2 = m2.GetRow(), col2 = m2.GetCol();
int n1 = row2*col2 - 1, n2 = col2*(row2 - 1);
matrix<T> m3(row1, col2);
T tmp, *p1 = m1.m_pMatrix, *p2 = m2.m_pMatrix, *p3 = m3.m_pMatrix, *p4 = p2;
assert(col1 == row2);
for (int i = 0; i < row1; i++, p1 += col1, p2 = p4) {
for (int j = 0; j < col2; j++, p1 -= col1, p2 -= n1, p3++) {
tmp = 0;
for (int k = 0; k < col1; k++, p1++, p2 += col2) {
tmp += *p1 * *p2;
}
*p3 = tmp;
}
}
return m3;
}
■ このスレッドは過去ログ倉庫に格納されています