gpt4 book ai didi

C++:多项式矩阵的输出

转载 作者:行者123 更新时间:2023-11-30 03:25:37 26 4
gpt4 key购买 nike

我有一个 std::vector<T> 类型的多项式和 std::vector<std::vector<T>> 类型的矩阵,为他们两个上课。每个类的输出(在我的例子中是 void print() 函数)工作正常。现在我创建了一个由多个多项式组成的矩阵,like this ,而且我不完全确定如何为其创建输出。

假设我有一个多项式 p1:Polynomial<T> p1{0,1,2} .我的 Polynomial::print 函数正确解释它并返回:x^2+x+1 .对于 Matrix<T> m1(2,2,0) 类型的“正常”矩阵,一个用 0 填充的 2x2 矩阵,它正确地返回 Matrix::print() 以及:

0, 0
0, 0

现在,假设我想要一个多项式矩阵 m1:Matrix<Polynomial<T>> mp(2,2,p1) ,之前的 2x2 矩阵填充多项式 p1。代码已被接受,但现在我想使用 matrix::print() 打印矩阵,以便我得到:

x^2+x+1, x^2+x+1
x^2+x+1, x^2+x+1

最小工作示例:

#include<iostream>
#include<vector>

using namespace std;

template <typename T>
class Polynomial;

template <typename T>
class Matrix
{
public:
Matrix(std::vector<std::vector<T> > ma);
Matrix(int rows, int cols, T const & init);
Matrix(const Matrix & m);
~Matrix();
Matrix ();
void print();
friend void Polynomial<T>::print();

private:
std::vector<std::vector<T>> Ma;
};

template <typename T>
Matrix<T>::Matrix(std::vector<std::vector<T>> ma)
:Ma(ma)
{}

template <typename T>
Matrix<T>::Matrix(int rows, int cols, T const & init)
{
std::vector<std::vector<T>> b(rows, std::vector<T>(cols, init));
Ma=b;
}

template <typename T>
Matrix<T>::~Matrix()
{}

template <typename T>
Matrix<T>::Matrix() :
Matrix(1,1,0)
{}

template <typename T>
Matrix<T>::Matrix(const Matrix & m)
{
Ma = m.Ma;
}


template <typename T>
void Matrix<T>::print()
{
for (auto i = 0; i < Ma.size(); i++)
{
for (auto j = 0; j < Ma[i].size(); j++)
if ( j == Ma.size()-1 )
{
cout << Ma[i][j]; //This causes problems
}
else
cout << Ma[i][j] << ", \t";
cout << endl;
}
}

template <typename T>
class Polynomial
{
public:
Polynomial(std::vector<T> const& coef);
Polynomial(std::initializer_list<T> const& coef);
void print();
const int getdeg();
const T getKoeff(int index) const;

friend class Matrix<T>;
Polynomial ();

friend void print();

private:
std::vector<T> coefficient;

};

template <typename T>
Polynomial<T>::Polynomial(std::vector<T> const& coef) :
coefficient(coef)
{}

template <typename T>
Polynomial<T>::Polynomial(std::initializer_list<T> const& coef) :
coefficient(coef)
{}

template <typename T>
Polynomial<T>::Polynomial ()
{
coefficient = new std::vector<T> [coefficient.getdeg()];
coefficient[0]=0;
}

template <typename T>
void Polynomial<T>::print() //Reduced version for demonstration purposes, but
{
for ( int i = getdeg(); i >= 0; i-- )
{
cout << coefficient[i] << "x^" << i; //the output is always of the type cout << xyz
}
}

template <typename T>
const int Polynomial<T>::getdeg()
{
int g = coefficient.size()-1;
return g;
}

int main()
{

typedef double T;
Polynomial<T> p1{0,1,2};
p1.print();

Matrix<Polynomial<T>> mp(2, 3, Polynomial<T>{0});
// mp.print(); //When this is commented out chaos ensues
return 0;
}

2x^21x^10被返回(注意:+&- 被排除在符号之外,因为代码太长)。

matrix::print() 可能由于 cout 而导致问题在处理多项式的结果时遇到问题。有人知道如何使 matrix::print() 为多项式矩阵提供有用的结果吗?提前谢谢你。

最佳答案

您想打印 Map[i][j] 的内容(它是 Polynomial<double> )通过使用 operator<<但是以 Polynomial<double> 作为参数的运算符没有定义。所以你应该添加声明

template<class U>
friend std::ostream& operator<<(std::ostream&,const Polynomial<U>&);

在你的Polynomial模板并在类外定义为

template<class T>
std::ostream& operator<<(std::ostream& out, const Polynomial<T>& poly)
{
poly.print();
return out;
}

然后你可以调用

cout << Ma[i][j] << ", ";

在你的Matrix<T>::print方法。

关于C++:多项式矩阵的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48933415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com