資料結構之陣列和矩陣--矩陣&不規則二維陣列
不規則二維陣列
不規則二維陣列的建立和使用
#include<iostream>
using namespace std;
int main()
{
int numberOfRows = 5;
int length[5] = {6,3,4,2,7};
int **irregularArray = new int *[numberOfRows];
for(int i = 0;i<numberOfRows; i++)
{
irregularArray[i] = new int [length[i]];
}
irregularArray[2][3] = 5;
irregularArray[4][6] = irregularArray[2][3]+2;
irregularArray[1][1] = 3;
cout<<irregularArray[2][3]<<endl;
cout<<irregularArray[4][6]<<endl;
cout<<irregularArray[1][1]<<endl;
}
矩陣
定義和操作
一個m*n的矩陣是一個m行,n列的表,m和n是矩陣的維數。
常見的矩陣操作:
矩陣的轉置;
矩陣的加法;
矩陣的乘法;
類matrix
下面展示一些 內聯程式碼片
。
template<class T>
class Matrix
{
friend ostream& operator<<(ostream& ,const Matrix<T>& );
public:
Matrix(int theRows = 0,int theColumns = 0); //空建構函式
Matrix(const Matrix<T>& );//複製構造器
~Matrix(){delete [] element;}//析構器
int Rows() const{return theRows;}//返回行
int columns() const{return theColumns;}//返回列
T& operator()(int i,int j) const;//過載“()”運算子
Matrix<T>& operator=(const Matrix<T>&);//過載=運算子
Matrix<T> operator+() const;//過載+運算子
Matrix<T> operator+(const Matrix<T>&) const;//過載+運算子
Matrix<T> operator-() const;//過載-運算子
Matrix<T> operator-(const Matrix<T>& ) const;//過載-運算子
Matrix<T> operator*(const Matrix<T>& ) const;//過載*運算子
Matrix<T>& operator+=(const T& );//過載+=運算子
private:
int theRows;
int theColumns;
T* element;
};
操作
下面展示一些 內聯程式碼片
。
template <class T>
Matrix<T>::Matrix(int theRows,int theColumns)
{
if(theRows < 0|| theColumns <0) cerr<<"Rows and columns must be >=0"<<endl;
if(theRows == 0|| theColumns == 0) cerr<<"Either both or rows and columns should be zero"<<endl;
this->theRows = theRows;
this->theColumns = theColumns;
element = new T [theRows*theColumns];
}
template<class T>
Matrix<T>::Matrix(const Matrix<T>& m)
{
theRows = m.theRows;
theColumns = m.theColumns;
element = new T[theRows*theColumns];
copy(m.element,m.element+theRows*theColumns,element);
return *this;
}
tempalte <class T>
T& Matrix<T>::operator()(int ,int j) const
{
if (i < 1||i>theRows||
j<1||j>theColumns )
cerr<<"wrong wrong wrong"<<endl;
return element[(i-1)*theColumns+j-1];
}
Matrix<T> Matrix<T>::operator(const Matrix<T>& m) const
{
Matrix<T> w (theRows,theColumns);
for(int i=0; i<theRows*theColumns;i++)
{
w.element[i] = element[i]+m.element[i];
}
return w;
}
tempalte<class T>
Matrix<T> Matrix<T>::operator*(const Matrix<T>& m)
{
Matrix<T> w(theRows,m.theColumns);
int ct = 0,cm = 0,cw = 0;
for(int i = 1;i<theRows;i++)
{
for(int j = 1;j<=m.theColumns;j++)
{
T sum = element[ct]*m.element[cm];
for(int k = 2;k<=theColumns;k++)
{
ct++;
cm += m.theColumns;
sum += element[ct]*m.element[cm];
}
w.element[cw++] = sum;
ct -= theColumns -1;
cm = j;
}
ct+=theColumns;
cm = 0;
}
return w;
}
解析:
上面的程式碼中,有幾點要說一下:
第一:在()運算子過載的時候,小括號中有兩個值,int i和int j,這代表著該元素再陣列中的位置處在第幾行,第幾列。經過函式後,返回的是一個element[i]的形式。這是因為element我們定義的時候就是把element定義成一個一維陣列,也就是說,我們把二維陣列所佔據的二維空間拉成直線的一維空間進行儲存。所以每一個二維陣列中的元素再一維陣列中都有一個對應的位置。(即一個對映函式)
第二,在過載矩陣乘法運算子的時候,我們採用三迴圈的辦法,這種辦法消耗的時間複雜度很大。其中cm += m.theColumns;這句程式碼所表現的和上面的一條的思想是一樣的,也是二維陣列轉化成三維陣列的一個過程。
相關文章
- 資料結構:陣列,稀疏矩陣,矩陣的壓縮。應用:矩陣的轉置,矩陣相乘資料結構陣列矩陣
- 矩陣和陣列矩陣陣列
- 第四章:多維陣列和矩陣 ------------- 4.8 子矩陣的最大累加和陣列矩陣
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- 演算法-陣列與矩陣演算法陣列矩陣
- 第四章:多維陣列和矩陣 --------------- 4.1 基礎題:順時針列印二維陣列陣列矩陣
- 指標陣列和陣列指標與二維陣列指標陣列
- C++ 練氣期之二維陣列與矩陣運算C++陣列矩陣
- python輸入詳解(陣列、矩陣)Python陣列矩陣
- 第四章:多維陣列和矩陣 ------------- 4.3 基礎題:Z形列印二位陣列陣列矩陣
- 二維陣列和稀疏陣列互轉陣列
- 資料結構之「陣列」資料結構陣列
- 資料結構之陣列資料結構陣列
- 240. 搜尋二維矩陣 II 和74. 搜尋二維矩陣矩陣
- 資料結構實驗 二維矩陣的實現資料結構矩陣
- 資料結構(一)-稀疏矩陣資料結構矩陣
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- LeetCode之資料結構——陣列LeetCode資料結構陣列
- 資料結構-陣列資料結構陣列
- 資料結構 - 陣列資料結構陣列
- 求二維陣列中最大子陣列的和陣列
- 6.5陣列--模擬、偏移量-螺旋矩陣陣列矩陣
- PHP中二維陣列與多維陣列PHP陣列
- 巨大的矩陣(矩陣加速)矩陣
- 鄰接矩陣、度矩陣矩陣
- 奇異矩陣,非奇異矩陣,偽逆矩陣矩陣
- 二維陣列陣列
- c語言中實現4行3列矩陣和3行4列矩陣的運算C語言矩陣
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- THREE 矩陣優先原則和平移旋轉矩陣矩陣
- leetcode:面試題 01.08. 零矩陣(陣列,中等)LeetCode面試題矩陣陣列
- 基礎資料結構之陣列資料結構陣列
- 玩轉資料結構之陣列資料結構陣列
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- 資料結構2——陣列資料結構陣列
- 脈動陣列在二維矩陣乘法及卷積運算中的應用陣列矩陣卷積