C++:实现向量和矩阵类的最佳结构

Posted

技术标签:

【中文标题】C++:实现向量和矩阵类的最佳结构【英文标题】:C++: the best structure for implementing Vector and Matrix classes 【发布时间】:2020-06-20 14:02:17 【问题描述】:

我想在 C++ 中实现VectorMatrix 类,这样VectorMatrix 对象就可以相乘。对于它们的实现,我可以想到以下两种结构:

    T*类型的数据实现模板类Vector,然后将模板类Matrix定义为Vectors的数组。

    使用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++:实现向量和矩阵类的最佳结构的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中对大输入实现矩阵的最有效方法?

在通用类的层次结构中使用访问者模式的最佳方法是啥?

c++为自定义矩阵类实现迭代器

C++ 矩阵和向量设计

c++中的二维向量问题

C ++中遗传算法的最佳数据结构?