Что касается использования пары, почему бы не использовать list<pair<double, int>>
(list< pair<double, int> >
для старых компиляторов)? Или вы можете даже определить отдельный класс для хранения вашей пары следующим образом:
// example is implemented inline, you could always pull it out to
// your source file; although it's even possible that you could
// do everything inline if you want to allow just including a
// header but not having to link a separate file.
class CoeffAndTerm : public pair<double,int>
{
public:
// if you need it you should put extra functions here to
// provide abstractions:
double getTotalValue()
{
return first * second;
}
}
и затем используйте
list<CoeffAndTerm> Polynomial;
как ваша переменная, или даже
// same stuff goes for this class RE: the inline function definitions
class Polynomial : public list<CoeffAndTerm>
{
public:
// same goes here for the abstraction stuff maybe things
// like in your current Polynomial class; assuming some
// functions here ...
Polynomial Multiply(Polynomial other)
{
Polynomial Result = new Polynomial();
for (int i=0; i < size(); ++i)
{
Result.addCoeffAndTerm(
new CoeffAndTerm(
other.first * first,
other.second * second
);
}
return Result;
}
}
так что у вас есть Полином, являющийся производным самого списка. Не уверен в точном использовании полинома, поэтому мне сложно говорить о том, что имеет больше смысла, но мне больше нравится этот способ как общее правило для такого типа, как этот; кажется, что полином «представляет собой» список коэффициентов и терминов, а не просто «имеет» его. :) Я уверен, что это вопрос спорный, и снова это зависит от фактического использования кода.
для операций, вы могли бы сделать возврат ссылок, как в одном из других примеров, но я реализовал умножение без изменения существующего значения, что вы также можете сделать для сложения, вычитания и т. Д., Так что, предположив сначала, Второе, третье и т. Д. Являются другими полиномами
Polynomial Result = First.Multiply(Second).Add(Third).Subtract(Fourth);
Вы также можете реализовать конструктор копирования operator =, operator +, operator *, operator /
, а затем делать вещи, которые выглядят как обычная математика:
Polynomial Result = First * Second + Third - Fourth;