经典数据结构之二维矩阵的基本运算

经典数据结构之⼆维矩阵的基本运算
数组的数组即是矩阵,这篇⽂章就是很好的例⼦。往往我们会抱怨c++ std⾥⾯没有现成的矩阵运算库,其实,矩阵运算⼗分容易构造,不论是⼆维数组,还是经过打包的数组,甚⾄是vector等容易,都可以很轻易地做出扩展,满⾜我们复杂的要求。
具体代码如下所述:
.h⽂件
#ifndef CARRAY2D_HHH
#define CARRAY2D_HHH
#include <cassert>
#include "Array1D.h"
template<typename T>
class CArray2D{
private:
// members;
int m_nRow, m_nCol;
CArray1D<T>* m_pArray;
public:
// constructors;
CArray2D(const int& row, const int& col);
CArray2D(const CArray2D& array);
~CArray2D();
碗公// methods;
// row Size;
int mRowSize() const;
// col Size;
溶洞处理int mColSize() const;
// operator [];
CArray1D<T>& operator[](int index) const;
// operator +;
CArray2D<T> operator+() const;
CArray2D<T> operator+(const CArray2D<T>& array) const;
// operator -;
CArray2D<T> operator-() const;
CArray2D<T> operator-(const CArray2D<T>& array) const;
/
/ operator *;
CArray2D<T> operator*(const CArray2D<T>& array) const;
// operator =;
CArray2D<T>& operator=(const CArray2D<T>& array);
// operator +=;
CArray2D<T>& operator+=(const CArray2D<T>& array);
// print;
void print(std::ostream& out) const;
};
template<typename T>
CArray2D<T>::CArray2D(const int& row, const int& col):
m_nRow(row), m_nCol(col){
assert((row > 0) && (col > 0));
m_pArray = new CArray1D<T>[row];
for(int i = 0; i < row; i ++)
m_pArray[i].mResize(m_nCol);
}
template<typename T>
template<typename T>
CArray2D<T>::CArray2D(const CArray2D<T>& array):
m_nRow(array.m_nRow), m_nCol(array.m_nCol){
m_pArray = new CArray1D<T>[m_nRow];
for(int i = 0; i < m_nRow; i ++){
m_pArray[i] = array[i];
}
}
template<typename T>
CArray2D<T>::~CArray2D(){
delete [] m_pArray;
}
template<typename T>
int CArray2D<T>::mColSize() const{
return m_nCol;
}
template<typename T>
int CArray2D<T>::mRowSize() const{
return m_nRow;
}
template<typename T>
CArray1D<T>& CArray2D<T>::operator[](int index) const{
assert(index >= 0) && index < m_nRow);
return m_pArray[index];
}
template<typename T>
CArray2D<T>& CArray2D<T>::operator=(const CArray2D<T>& array){
if(&array != this){
delete [] m_pArray;
m_pArray = new CArray1D<T>[m_nRow];
m_nRow = array.m_nRow;
m_nCol = array.m_nCol;
for(int i = 0; i < m_nRow; i ++){
m_pArray[i] = array[i];
}
}
return *this;
}
template<typename T>
CArray2D<T> CArray2D<T>::operator+() const{
CArray2D<T> tmp(m_nRow, m_nCol);
for(int i = 0; i < m_nRow; i ++)
tmp.m_pArray[i] = (+m_pArray[i]);
return tmp;
}
template<typename T>
CArray2D<T> CArray2D<T>::operator+(const CArray2D<T>& array) const{ assert((m_nRow == array.m_nRow) && (m_nCol == array.m_nCol));
CArray2D<T> tmp(m_nRow, m_nCol);
for(int i = 0; i < m_nRow; i ++)
tmp.m_pArray[i] = this->m_pArray[i] + array.m_pArray[i];
return tmp;
天网搜索}
template<typename T>
CArray2D<T> CArray2D<T>::operator-() const{
CArray2D<T> tmp(m_nRow, m_nCol);
for(int i = 0; i < m_nRow; i ++)
for(int i = 0; i < m_nRow; i ++)
tmp.m_pArray[i] = (-m_pArray[i]);
自动旋转喷雾喷头return tmp;
}
template<typename T>
CArray2D<T> CArray2D<T>::operator-(const CArray2D<T>& array) const{ assert((m_nRow == array.m_nRow) && (m_nCol == array.m_nCol));
CArray2D<T> tmp(m_nRow, m_nCol);
for(int i = 0; i < m_nRow; i ++)
tmp.m_pArray[i] = this->m_pArray[i] - array.m_pArray[i];
return tmp;
}
template<typename T>内裤加工
CArray2D<T> CArray2D<T>::operator*(const CArray2D<T>& array) const{ assert(array.m_nCol == m_nRow);
CArray2D<T> tmp(m_nRow, array.m_nCol);
for(int i = 0; i < m_nRow; i ++){
for(int j = 0; j < array.m_nCol; j ++){
tmp.m_pArray[i][j] = 0;
for(int k = 0; k < m_nCol; k ++)
tmp.m_pArray[i][j] += m_pArray[i][k] * array.m_pArray[k][j];
}
}
return tmp;
}
template<typename T>
void CArray2D<T>::print(std::ostream& out) const{
for(int i = 0; i < m_nRow; i ++)
m_pArray[i].print(out);
山药去皮机}
#endif

本文发布于:2024-09-22 03:42:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/166099.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   运算   数组   自动   扩展   溶洞   加工
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议