金【精品】样版类别-向量和矩阵的定义

上传人:e****s 文档编号:48432242 上传时间:2018-07-15 格式:PPT 页数:98 大小:289.50KB
返回 下载 相关 举报
金【精品】样版类别-向量和矩阵的定义_第1页
第1页 / 共98页
金【精品】样版类别-向量和矩阵的定义_第2页
第2页 / 共98页
金【精品】样版类别-向量和矩阵的定义_第3页
第3页 / 共98页
金【精品】样版类别-向量和矩阵的定义_第4页
第4页 / 共98页
金【精品】样版类别-向量和矩阵的定义_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《金【精品】样版类别-向量和矩阵的定义》由会员分享,可在线阅读,更多相关《金【精品】样版类别-向量和矩阵的定义(98页珍藏版)》请在金锄头文库上搜索。

1、樣版類別向量和矩陣的定義 向量和矩陣是線性代數和數值分析的基 礎。藉由這兩個類別,我們介紹如何建 立樣版類別 (template class)。此外,我 們還要在本章中討論動態建立和移除物 件的語法。 231/97樣版類別向量和矩陣的定義n23.1 向量n23.2 Vector樣版類別n23.3 矩陣n23.4 Matrix樣版類別n23.5 物件陣列的動態創造和刪除n23.6 常犯的錯誤223.1 向量 把向量(vector)定義成物件的好處: 1. 將向量視為獨立的單元。 2. 透過運算子重載,將向量運算以最精簡、最接近 數學式的方式表達。例如,向量間的加法和內積可以分別簡潔地寫成V1 +

2、 V2和V1 * V2 。3使用指標定義向量(1/2)n 考慮線性代數一般的使用習慣,可以犧牲第 一個元素不用,而將記憶空間安排為N+1個 元素: int N = 5; float* V = new float N+1; 圖示如下:4使用指標定義向量(2/2)可以使用delete回收不再使用的記憶體 資源。 delete V; 523.2 Vector樣版類別 n定義樣版類別 (class template)。以下是一個簡化的例子: template /T代表一個尚未決定的資料型態 class Vector private:int Size;T* V;public:Vector(int); /

3、 建構函數不使用Vector Vector(Vector / 類別名稱以Vector 表示Vector(); / 解構函數不使用Vector ;6定義樣版類別 (一個以上的未定類別)n定義樣版類別 (一個以上的未定類別)template class Vector/ . 其他敘述;7以樣版類別Vector定義物件n分別用來宣告一個整數向量Vi和一個浮點數向 量Vd:Vector Vi;Vector Vd; 8成員函數的定義在實作樣版類別的成員函數時,必需在每個成員函數 的定義前都加上template 的宣告。 例如,Vector 的建構函數可以寫成:template Vector:Vector(

4、int N)Size = N; V= new TN+1;return;9Vector 的解構函數template Vector:Vector() delete V; 10加法operator+() 的重載成員函數template Vector Vector:operator + (const Vectorfor (int i=1; i Vector Vector:operator+(const VectorVector Temp(Size);for (int i=1; i void Vector:Create(int N) if(NVector:Vector(Vectorfor (int i=

5、1; iVector Vector:operator=(const Vector for (int i=1; iSize, “索引錯誤, 超過邊界!“);return Vi; 20專門用來顯示向量的函數Display() template void Vector:Display() for(int i = 1; i #include using namespace std;inline void Check(bool ErrorCondition,const string/ 宣告乘法運算子-2 operator * () 23範例程式檔案 Vector.h 定義樣版類 別Vector的完整程式

6、(3/18)friend Vector operator*(const Vectorprivate:int Size;T* V;inline void Create(int);public:/ 宣告建構函數Vector(int);Vector(int, const T*);24範例程式檔案 Vector.h 定義樣版類 別Vector的完整程式(4/18)/ 宣告複製建構函數Vector(Vector/ 宣告解構函數Vector();/ Operators/ 宣告指派運算子 operator = ()Vector operator=(const Vector/ 宣告加法運算子 operator

7、 + ()Vector operator+(const Vector/ 宣告減法運算子 operator - ()25範例程式檔案 Vector.h 定義樣版類 別Vector的完整程式(5/18)Vector operator-(const Vector/ 宣告乘法運算子-3 operator * ()T operator*(const Vector/ 宣告除法運算子 operator / ()Vector operator/(const T/ 宣告索引運算子 operator ()Treturn Vi;/ 宣告成員函數 Display()void Display(); ;27範例程式檔案

8、Vector.h 定義樣版類 別Vector的完整程式(7/18)/ 函數 Create() 的定義 template void Vector:Create(int N) if(N Vector:Vector(int N) Create(N); return; / 解構函數的定義 template Vector:Vector() delete V; 29範例程式檔案 Vector.h 定義樣版類 別Vector的完整程式(9/18)/ 複製建構函數的定義-1 template Vector:Vector(int N, const T* OldV) Create(N);for (int i=1;

9、 i Vector:Vector(Vectorfor (int i=1; i Vector Vector:operator=(const Vectorfor (int i=1; i Vector Vector:operator+(const VectorVector Temp(Size);for (int i=1; i Vector Vector:operator-(const VectorVector Temp(Size);for (int i=1; i Vector operator*(const Tfor(int i=1; i Vector operator*(const Vectorf

10、or(int i=1; i T Vector:operator*(const Vector T Product = 0;for (int i=1; i void Vector:Display() for(int i = 1; i Vector Vector:operator/(const Tfor (int i=1; i 和Vector 去宣告 包含int和double兩種資料型態元素的向量:DV1、DV2 、IV1和IV2,並驗證向量除以浮點數、向量間加法和 向量內積的正確性。我們也藉由DVb1、DVb2 和 DVb3 驗證了索引運算子。 40範例程式檔案TestVector.cpp(2/6

11、)/ TestVector.cpp #include “Vector.h“int main () double Ddata1=2, 0.5, 4.6;double Ddata2=4, 6.5, 3.8;int Idata1=2, 5, 6;int Idata2=4, 65, 38;41範例程式檔案TestVector.cpp(3/6)Vector DV1(3, Ddata1);Vector DV2(3, Ddata2), DVa(3), DVb(3);Vector IV1(3, Idata1);Vector IV2(3, Idata2), IVa(3), IVb(3);int Idot;dou

12、ble Ddot;cout : “ : “: DV1 的值是: 2.0000 0.5000 4.6000DV2 的值是: 4.0000 6.5000 3.8000(DV1 + DV2) 的值是:6.0000 7.0000 8.4000(DV1/2.0) 的值是: 1.0000 0.2500 2.3000DV1 和 DV2 的內積是 : 28.7300- 46程式執行結果(2/2)測試 Vector: IV1 的值是:2 5 6IV2 的值是: 4 65 38(IV1 + IV2)的值是:6 70 44(IV1/2.0) 的值是:1 2 3IV1 和 IV2 的內積是 : 561 4723.3

13、矩陣 n二維陣列稱為矩陣(matrix)。 n向量的外積(outer product) 也會產生矩 陣。 n矩陣內的單一行或單一列抽離出來也可形成 向量。 48使用指標定義矩陣(1/7) n以動態配置的方式在執期間設定矩陣語法有兩種 :(1) 將各列在記憶體中獨立設定 int M = 3;int N = 4;float* A = new float *M;for (int i=0; i M1(2,3, W1); 56定義Matrix樣版類別的建構函數 template Matrix:Matrix(int Row, int Col, const T* V) Create(Row,Col);for

14、(int i = 1; i void Matrix:Create(int Row, int Col) Check(Row Vector Matrix:PickCol(int I) Vector TempV(M);for (int i=1; i void Matrix:SetCol(int j, Vector i #include using namespace std;64範例程式 檔案 Matrix.h ( 樣版類別Matrix的完整定義)(2/16)/ = 宣告 Matrix 樣版類別 = template class Matrix private:int M, N; T* A;void

15、Create(int, int);public: / 宣告建構函數Matrix(int, int);Matrix(int, int, const T*); 65範例程式 檔案 Matrix.h ( 樣版類別Matrix的完整定義)(3/16)/ 宣告複製建構函數Matrix(Matrix/ 宣告解構函數Matrix();/operator/ 宣告指派運算子 operator = ()Matrix operator=(const Matrix / 宣告加法運算子 operator + ()Matrix operator+(const Matrix 66範例程式 檔案 Matrix.h ( 樣版類別Matrix的完整定義)(4/16)/ 宣告乘法運算子 ope

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号