資料結構實驗 二維矩陣的實現
資料結構實驗 二維矩陣的實現
#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陣列
- Bert結構手動矩陣運算實現(Transform)矩陣ORM
- 資料結構實驗(4)資料結構
- 資料結構實驗1資料結構
- 資料結構--單連結串列(通過陣列實現)資料結構陣列
- C#實現圖的鄰接矩陣和鄰接表結構C#矩陣
- 資料結構-二叉搜尋樹的實現資料結構
- 資料結構--LinkedList的實現資料結構
- (C++)資料結構實驗二——迷宮問題C++資料結構
- 實現二維陣列的行列互換陣列
- 資料結構實驗之連結串列二:逆序建立連結串列資料結構
- 資料結構實驗之圖論二:圖的深度遍歷資料結構圖論
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構實驗:連結串列的應用資料結構
- JavaScript資料結構——圖的實現JavaScript資料結構
- 資料結構實驗課五-1資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 資料結構實驗三 2024_樹與圖實驗資料結構
- js實現資料結構--棧JS資料結構
- redis資料結構實現(一)Redis資料結構
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 資料結構 實驗六(二叉排序樹字元統計)資料結構排序字元
- 資料結構與演算法系列(一)陣列實現資料結構演算法陣列
- 資料結構-棧(通過陣列和單向連結串列實現)資料結構陣列
- 一、【資料結構】向量(vector)的實現資料結構
- 資料結構:稀疏棋盤的實現資料結構
- LeetCode 74——搜尋二維矩陣LeetCode矩陣
- 二維旋轉矩陣推導矩陣
- 74_搜尋二維矩陣矩陣
- 74. 搜尋二維矩陣矩陣
- 資料結構(雙向連結串列的實現)資料結構
- Java實現資料結構之線性結構Java資料結構
- 資料結構系列:Objective-C實現二叉樹資料結構Object二叉樹