我想实现矩阵的表示。为此,我有两种类型的矩阵 - 常规和稀疏,它们的实现不同 - 一个包含一个向量,第二个是索引和值的映射,都继承自Matrix
类。
为此,我正在使用策略模式,在那里我创建了基本抽象类Matrix
,这两个类继承自Matrix
- RegMatrix
和SparseMatrix
,以及{{ 1}}包含指向MyMatrix
的指针。
我想实施Matrix
运算符,该运算符在+
上运行并接收另一个Matrix
。但是当我实现Matrix
运算符时,我可能会收到参数稀疏/常规矩阵。
所以我有两个问题:
我唯一的提示是创建一个“matrix”类型的迭代器,并为每种类型的矩阵(常规和稀疏)实现迭代器。 我该怎么办呢?
假设我为两种类型的“矩阵”实现了迭代器。我如何使用不同的迭代器,以防我必须添加两种不同类型的矩阵?我是否必须实施所有4种不同的案例?
运营商+看起来像:
+
答案 0 :(得分:2)
不希望在基类中实现该功能。
在每个子类中实现功能。这将允许使用最佳算法。
或者您可以在Base类中将getter和setter声明为abstract,并在基类实现中使用它们:
struct Matrix_Base
{
virtual int get_value(unsigned int row, unsigned int column) = 0;
virtual void set_value(int value, unsigned int row, unsigned int column) = 0;
Matrix_Base operator+(const Matrix_Base& other)
{
// perform addition
int sum = get_value(row, column) + other.get_value(column, row);
set_value(sum, row, column);
//...
}
};
请记住,在传递Matrix时,接收函数只能使用Matrix的常用函数(接口)。对于细节,函数必须在参数列表中使用专门的(后代)。
答案 1 :(得分:0)
您只能为RegMatrix和2个转换运算符实现+运算符: 1.从RegMatrix到SparseMatrix 2.从SparseMatrix到RegMatrix
什么是性能要求?