# 对角矩阵

diagonalMatrix.cpp

```/*
* 对角矩阵测试函数的主函数
* diagonalMatrix.cpp
*/
#include<iostream>
#include"diagonalmatrix.h"

using namespace std;

int main(void)
{
diagonalMatrix<int> x(20);
x.set(1,1,22);
x.set(5,5,44);
x.set(8,5,0);

cout<<x.get(5,5) <<endl;
cout<<x.get(1,1) <<endl;
cout<<x.get(10,1) <<endl;

return 0;
}```

diagonalMatrix.h

```/*
* 对角矩阵
* diagonalMatrix.h
*/
#ifndef DIAGONALMATRIX_H
#define DIAGONALMATRIX_H

#include"myexceptions.h"

template<class T>
class diagonalMatrix
{
public:
diagonalMatrix(int theN = 10);
~diagonalMatrix(){delete [] element;}
T get(int,int) const;
void set(int,int,const T&);
private:
int n;
T* element;
};

//构造函数的具体实现
template<class T>
diagonalMatrix<T>::diagonalMatrix(int theN)
{
if(theN < 1)
throw illegalParameterValue("Matrix size must be > 0");

n = theN;
element = new T [n];
}

//get()函数的具体实现
template<class T>
T diagonalMatrix<T>::get(int i, int j) const
{
if(i < 1 || j < 1 || i > n || j > n)
throw matrixIndexOutOfBounds();

if(i == j)
return element[i - 1];
else
return 0;
}

//set()函数的具体实现
template<class T>
void diagonalMatrix<T>::set(int i, int j, const T& newValue)
{
if(i<1 || j < 1 || i > n || j > n)
throw matrixIndexOutOfBounds();
if(i == j)
element[i-1] = newValue;
else
if(newValue != 0)
throw illegalParameterValue
("Nondiagonal elements must be zero");
}

#endif // DIAGONALMATRIX_H```

myExceptions.h

```/*
*异常类
*myExceptions.h
*/
#ifndef MYEXCEPTIONS_H
#define MYEXCEPTIONS_H
#include<string>

using namespace std;

//不合法的参数值
class illegalParameterValue
{
public:
illegalParameterValue(string theMessage = "Illegal parameter value")
{
message = theMessage;
}
void outputMessage()
{
cout <<message<<endl;
}
private:
string message;
};

//数组索引不合法
class matrixIndexOutOfBounds
{
public:
matrixIndexOutOfBounds(string theMessage = "Matrix index out of bounds")
{
message = theMessage;
}
void outputMessage()
{
cout << message <<endl;
}
private:
string message;
};

//数组大小不匹配
class matrixSizeMismatch
{
public:
matrixSizeMismatch(string theMessage =
"The size of the two matrics doesn't match")
{
message = theMessage;
}
void outputMessage()
{
cout << message <<endl;
}
private:
string message;
};

#endif // MYEXCEPTIONS_H```

137 篇文章40 人订阅

0 条评论

## 相关文章

### python科学计算之numpy

1.np.logspace(start,stop,num): 函数表示的意思是;在（start,stop）间生成等比数列num个 eg:  import num...

38160

### Python标准库random用法精要

random标准库主要提供了伪随机数生成函数和相关的类，同时也提供了SystemRandom类（也可以直接使用os.urandom()函数）来支持生成加密级别要...

31160

### 函数玩一玩 | 【SAS Says·扩展篇】IML：2.函数

【SAS Says·扩展篇】IML 分6集，回复【SASIML】查看全部： 入门 | SAS里的平行世界 函数 | 函数玩一玩 编程 | IML的条件与循环 模...

39190

17930

705120

### 【干货】seq2seq模型实例：用Keras实现机器翻译

【导读】近日，人工智能学者Ravindra Kompella发表一篇博客，介绍了作者实现的基于keras的机器翻译例子。作者通过一个seq2seq编码器-解码器...

80680

12910

### Deep learning基于theano的keras学习笔记（1）-Sequential模型

《统计学习方法》中指出，机器学习的三个要素是模型，策略和优算法，这当然也适用于深度学习，而我个人觉得keras训练也是基于这三个要素的，先建立深度模型，然后选用...

10310

40900

29490