C++:实现向量和矩阵类的最佳结构
Posted
技术标签:
【中文标题】C++:实现向量和矩阵类的最佳结构【英文标题】:C++: the best structure for implementing Vector and Matrix classes 【发布时间】:2020-06-20 14:02:17 【问题描述】:我想在 C++ 中实现Vector
和Matrix
类,这样Vector
和Matrix
对象就可以相乘。对于它们的实现,我可以想到以下两种结构:
用T*
类型的数据实现模板类Vector
,然后将模板类Matrix
定义为Vector
s的数组。
使用T**
类型的数据实现模板类Matrix
,然后继承模板类Vector
作为Matrix
,使用(列数=1)。
第一种方法的缺点是,Vector
类不处理列向量和行向量,向量-向量乘法会有问题,而在第二种方法中,Vector
将被视为具有(列数 =1)或T**
的二维矩阵。
实现这两个类的最佳方法是什么? 谢谢。
【问题讨论】:
这两种方法都不好。矩阵应该实现为一个连续数组,即T*
(或者,更简洁的,std:vector<T>
)。这为您提供了连续存储,并且您的 Matrix
类处理索引计算。
见this answer。
【参考方案1】:
我不建议使用原始指针做太多的事情,以后会变得非常混乱,并且是调试的噩梦。我会使用通用向量
template<typename T>
std::vector<T>
因此您可以根据需要使用不同的类型。但如果你只处理数字,我不会过度设计它。
对于乘法,您可以使用运算符重载。 您可以查看相同的现有实现,看看是否有适合您需求的东西。一个快速的谷歌研究给了我这个:
CodeProject
如果您发现任何其他内容,请随时将其添加到您的问题中,这样就没有人需要重新发明***了。
【讨论】:
以上是关于C++:实现向量和矩阵类的最佳结构的主要内容,如果未能解决你的问题,请参考以下文章