資料結構實驗 二維矩陣的實現
資料結構實驗 二維矩陣的實現
#include <iostream>
#include <cstdio>
#include <memory>//包含unique_ptr的標頭檔案
using namespace std;
template <class T>
class Matrix
{
public:
Matrix()=default;//預設建構函式
Matrix(int a1,int a2);//含行列數的建構函式
T operator()(int i,int j) const;//過載(),用來獲取元素的值
T& operator()(int i,int j);//過載(),用來修改元素的值
int getb1();//獲取行數b1
int getb2();//獲取列數b2
void print();//列印矩陣各元素
Matrix operator +(Matrix &B);//過載運算子+,矩陣相加
Matrix operator -(Matrix &B);//過載運算福-,矩陣相減
Matrix operator *(Matrix &B);//過載運算福*,矩陣相乘
private:
int b1,b2;
unique_ptr<T[]> pointer;
};
template <class T>
Matrix<T>::Matrix(int a1,int a2)//含行列數的建構函式
{
b1=a1;b2=a2;
pointer=unique_ptr<T[]>(new int[b1*b2]);
}
template <class T>
T Matrix<T>::operator()(int i,int j) const//過載(),用來獲取元素的值
{
return pointer[i*b2+j];
}
template <class T>
T& Matrix<T>::operator()(int i,int j)//過載(),用來修改元素的值
{
return pointer[i*b2+j];
}
template <class T>
int Matrix<T>::getb1()//獲取行數b1
{
return b1;
}
template <class T>
int Matrix<T>::getb2()//獲取列數b2
{
return b2;
}
template <class T>
void Matrix<T>::print()//列印矩陣各元素
{
for(int i=0;i<b1;i++)
{
for(int j=0;j<b2;j++)
printf("%d ",pointer[i*b2+j]);
printf("\n");
}
}
template <class T>
Matrix<T> Matrix<T>::operator +(Matrix &B)//過載運算子+,矩陣相加
{
if(b1!=B.getb1()||b1!=B.getb2())
return Matrix();
Matrix C(b1,b2);
for(int i=0;i<b1;i++)
for(int j=0;j<b2;j++)
C(i,j)=pointer[i*b2+j]+B(i,j);
return C;
}
template <class T>
Matrix<T> Matrix<T>::operator -(Matrix &B)//過載運算福-,矩陣相減
{
if(b1!=B.getb1()||b1!=B.getb2())
return Matrix();
Matrix C(b1,b2);
for(int i=0;i<b1;i++)
for(int j=0;j<b2;j++)
C(i,j)=pointer[i*b2+j]-B(i,j);
return C;
}
template <class T>
Matrix<T> Matrix<T>::operator *(Matrix &B)//過載運算福*,矩陣相乘
{
if(b2!=B.getb1())//第二個矩陣的行數等於第一個矩陣的列數時才可以相乘
return Matrix();
Matrix C(b1,b2);
for(int i=0;i<b1;i++)
for(int j=0;j<b2;j++)
C(i,j)=0;
for(int i=0;i<b1;i++)
for(int j=0;j<B.getb2();j++)
for(int k=0;k<b2;k++)
C(i,j)+=pointer[i*b2+k]*B(k,j);
return C;
}
int main()
{
//資料測試
Matrix<int> A(2,2);
int k=0;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
A(i,j)=++k;
printf("矩陣A各元素的值為:\n");
A.print();
Matrix<int> B(2,2);
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
B(i,j)=2;
printf("矩陣B各元素的值為:\n");
B.print();
Matrix<int> C=A+B;
Matrix<int> D=A-B;
Matrix<int> E=A*B;
printf("矩陣C各元素的值為:\n");
C.print();
printf("矩陣D各元素的值為:\n");
D.print();
printf("矩陣E各元素的值為:\n");
E.print();
return 0;
}
相關文章
- 資料結構實驗 多維陣列的實現資料結構陣列
- 資料結構之陣列和矩陣--矩陣&不規則二維陣列資料結構陣列矩陣
- js實現資料結構--陣列JS資料結構陣列
- 矩陣中最大的二維矩陣矩陣
- 資料結構(一)-稀疏矩陣資料結構矩陣
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 資料結構之php實現陣列資料結構PHP陣列
- 資料結構實驗(4)資料結構
- java 資料結構 之 佇列的實現 (二)Java資料結構佇列
- java 資料結構實現陣列封裝 (一)Java資料結構陣列封裝
- 資料結構實驗——二叉樹的常見操作資料結構二叉樹
- Wannafly模擬賽 矩陣 二維矩陣hash矩陣
- 資料結構--單連結串列(通過陣列實現)資料結構陣列
- C#實現圖的鄰接矩陣和鄰接表結構C#矩陣
- (C++)資料結構實驗二——迷宮問題C++資料結構
- 實現二維陣列的行列互換陣列
- 資料結構-二叉搜尋樹的實現資料結構
- Python資料結構——二叉堆的實現Python資料結構
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構實驗三:線性表綜合實驗資料結構
- javascript如何實現二維陣列效果JavaScript陣列
- javascript實現二維陣列實現簡單介紹JavaScript陣列
- 資料結構之通用樹結構的實現資料結構
- 資料結構實驗:連結串列的應用資料結構
- python資料結構之二叉樹的實現Python資料結構二叉樹
- 資料結構實驗課五-1資料結構
- JavaScript資料結構——圖的實現JavaScript資料結構
- 資料結構--LinkedList的實現資料結構
- C++實現蛇形矩陣C++矩陣
- OpenCL之矩陣乘法實現矩陣
- 二維陣列笛卡爾積js實現陣列JS
- c#簡單實現二維陣列和二維陣列列表List<>的轉置C#陣列
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 資料結構 實驗六(二叉排序樹字元統計)資料結構排序字元
- 74. 搜尋二維矩陣矩陣
- 二維旋轉矩陣推導矩陣