2626namespace Gambit {
2727
2828template <class T >
29- Array <Monomial<T>> Polynomial<T>::Adder(const Array <Monomial<T>> &p_one,
30- const Array <Monomial<T>> &p_two) const
29+ std::vector <Monomial<T>> Polynomial<T>::Adder(const std::vector <Monomial<T>> &p_one,
30+ const std::vector <Monomial<T>> &p_two) const
3131{
3232 if (p_one.empty ()) {
3333 return p_two;
3434 }
3535 if (p_two.empty ()) {
3636 return p_one;
3737 }
38- Array <Monomial<T>> answer;
38+ std::vector <Monomial<T>> answer;
3939 answer.reserve (p_one.size () + p_two.size ());
4040
4141 auto it1 = p_one.begin ();
@@ -73,10 +73,10 @@ Array<Monomial<T>> Polynomial<T>::Adder(const Array<Monomial<T>> &p_one,
7373}
7474
7575template <class T >
76- Array <Monomial<T>> Polynomial<T>::Mult(const Array <Monomial<T>> &p_one,
77- const Array <Monomial<T>> &p_two) const
76+ std::vector <Monomial<T>> Polynomial<T>::Mult(const std::vector <Monomial<T>> &p_one,
77+ const std::vector <Monomial<T>> &p_two) const
7878{
79- Array <Monomial<T>> result;
79+ std::vector <Monomial<T>> result;
8080
8181 if (p_one.empty () || p_two.empty ()) {
8282 return result;
@@ -90,7 +90,7 @@ Array<Monomial<T>> Polynomial<T>::Mult(const Array<Monomial<T>> &p_one,
9090 }
9191 std::sort (result.begin (), result.end (),
9292 [](const Monomial<T> &a, const Monomial<T> &b) { return a.ExpV () < b.ExpV (); });
93- Array <Monomial<T>> merged;
93+ std::vector <Monomial<T>> merged;
9494 merged.reserve (result.size ());
9595
9696 auto it = result.begin ();
@@ -152,7 +152,7 @@ template <class T> Polynomial<T> Polynomial<T>::DivideByPolynomial(const Polynom
152152
153153template <class T > Polynomial<T> Polynomial<T>::PartialDerivative(int varnumber) const
154154{
155- Array <Monomial<T>> terms;
155+ std::vector <Monomial<T>> terms;
156156 terms.reserve (m_terms.size ());
157157
158158 for (const auto &term : m_terms) {
@@ -164,14 +164,15 @@ template <class T> Polynomial<T> Polynomial<T>::PartialDerivative(int varnumber)
164164 terms.emplace_back (term.Coef () * static_cast <T>(exponent), expv.DecrementExponent (varnumber));
165165 }
166166
167- Polynomial<T> result (m_space);
167+ Polynomial result (m_space);
168168 result.m_terms = std::move (terms);
169169 return result;
170170}
171171
172172template <class T > Polynomial<T> Polynomial<T>::LeadingCoefficient(int varnumber) const
173173{
174174 Polynomial result (m_space);
175+ result.m_terms .reserve (m_terms.size ());
175176
176177 const int degree = DegreeOfVar (varnumber);
177178 if (degree == 0 ) {
@@ -239,6 +240,7 @@ Polynomial<T> Polynomial<T>::TranslateOfMono(const Monomial<T> &m,
239240template <class T > Polynomial<T> Polynomial<T>::TranslateOfPoly(const Vector<T> &new_origin) const
240241{
241242 Polynomial answer (m_space);
243+ answer.m_terms .reserve (m_terms.size ());
242244 for (const auto &mono : m_terms) {
243245 answer += TranslateOfMono (mono, new_origin);
244246 }
@@ -261,6 +263,7 @@ Polynomial<T> Polynomial<T>::MonoInNewCoordinates(const Monomial<T> &m, const Ma
261263 }
262264
263265 Polynomial linearform (m_space);
266+ linearform.m_terms .reserve (GetDimension ());
264267 for (int j = 1 ; j <= dim; ++j) {
265268 const T &coeff = M (var_index, j);
266269 if (coeff != static_cast <T>(0 )) {
@@ -276,6 +279,7 @@ Polynomial<T> Polynomial<T>::MonoInNewCoordinates(const Monomial<T> &m, const Ma
276279template <class T > Polynomial<T> Polynomial<T>::PolyInNewCoordinates(const Matrix<T> &M) const
277280{
278281 Polynomial answer (m_space);
282+ answer.m_terms .reserve (m_terms.size ());
279283 for (const auto &term : m_terms) {
280284 answer += MonoInNewCoordinates (term, M);
281285 }
0 commit comments