Попытка добавить два вектора, но это добавление в неправильном порядке - PullRequest
1 голос
/ 01 ноября 2019

В этой функции я работаю над тем, чтобы добавить коэффициенты полиномов, коэффициенты хранятся в векторах. П является частным членом класса Полином, который я сделал. «RHS» не является членом класса - это еще один экземпляр класса, поэтому я все еще могу получить доступ ко всем его закрытым членам, например, RHS.P [i]. Это код, который у меня есть до сих пор. `

          Polynom Polynom::operator+(const Polynom& RHS) cons
          vector <int> temp;
          vector <int> temp2;
          vector <int> temp3;


for (int i = 0; i <= P.size()-1; i ++)
{
    temp.push_back(P[i]);
}

for (int i = 0; i <= RHS.P.size()-1; i ++)
{
    temp2.push_back(RHS.P[i]);
}

int largerPoly = P.size()-1;

for (int i = 0; i <= P.size()-1; i++)
{
  if(largerPoly == RHS.P.size()-1)
  {
    temp3.push_back(temp2[largerPoly - i]);
  }
    else
    {
    temp3.push_back(temp[i]);
    }
    largerPoly --;
}
 return Polynom(temp3);




                       `

Так, например, если я введу в свой вектор P: (4) (2) (- 1) (2) (0) (0) (2)

Ив другом векторе: (-4) (0) (1)

Результирующий вектор должен быть: (4) (2) (- 1) (2) (- 4) (0) (3)(1 + 2) = 3 (0 + -4) = - 4

Это означает, что я хочу добавить вектор сзади (надеюсь, это имеет смысл)

к сожалению, это невыходной я получаю с этим кодом. Любые советы о том, что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Храните ваши коэффициенты в обратном порядке.

x^3 + x + 1 == 1 + x + x^3 <=> [1, 1, 0, 1]

И теперь все ваши термины всегда будут выстраиваться, а коэффициент x^n равен индексу n.

0 голосов
/ 01 ноября 2019

Упростите и просто разделите два случая:

Polynom Polynom::operator+(const Polynom& arg) const
{
    const auto &lhs = this->P; // define some shorthand refs
    const auto &rhs = RHS.P;

    std::vector<int> res;

    // case 1: lhs is larger
    if (lhs.size() > rhs.size()) {
        res.assign(lhs.begin(), lhs.end()); // copy lhs into res

        auto offset = lhs.size() - rhs.size();

        for (auto i = 0; i < rhs.size(); i++) {
            res[i + offset] += rhs[i];
        }
    }
    // case 2: rhs is larger
    else {
        res.assign(rhs.begin(), rhs.end()); // copy lhs into res

        auto offset = rhs.size() - lhs.size();

        for (auto i = 0; i < lhs.size(); i++) {
            res[i + offset] += lhs[i];
        }
    }

    return Polynom(res);
}

Использование ссылок также означает, что нам не нужно копировать все данные в несколько локальных переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...