C++ 试图添加两个向量,但添加顺序错误

C++ 试图添加两个向量,但添加顺序错误,c++,class,vector,C++,Class,Vector,在这个函数中,我的目标是将多项式的系数相加,系数存储在向量中。P是我制作的多项式类的私有成员。“RHS”不是该类的成员-它是该类的另一个实例,因此我仍然可以访问它的所有私有成员,如RHS.P[I]。这是我到目前为止掌握的代码。 ` Polynom Polynom::operator+(const Polynom& RHS) cons vector <int> temp; vector <int> temp

在这个函数中,我的目标是将多项式的系数相加,系数存储在向量中。P是我制作的多项式类的私有成员。“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);




                       `
多项式多项式::运算符+(常数多项式和RHS)cons
向量温度;
向量temp2;
向量temp3;

对于(int i=0;i使其更容易,并简单地将两种情况分开:

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);
}
Polynom Polynom::operator+(const Polynom&arg)const
{
const auto&lhs=this->P;//定义一些速记引用
const auto&rhs=rhs.P;
std::向量res;
//案例1:lhs更大
如果(lhs.size()>rhs.size()){
res.assign(lhs.begin(),lhs.end());//将lhs复制到res中
自动偏移=lhs.size()-rhs.size();
对于(自动i=0;i

使用引用还意味着,我们不必将整个数据复制到几个局部变量中。

使之更容易,只需将两种情况分开:

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);
}
Polynom Polynom::operator+(const Polynom&arg)const
{
const auto&lhs=this->P;//定义一些速记引用
const auto&rhs=rhs.P;
std::向量res;
//案例1:lhs更大
如果(lhs.size()>rhs.size()){
res.assign(lhs.begin(),lhs.end());//将lhs复制到res中
自动偏移=lhs.size()-rhs.size();
对于(自动i=0;i

使用引用也意味着,我们不必在几个局部变量中复制整个数据。

以相反的顺序存储系数

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

现在你所有的术语都会排成一行,
x^n
的系数位于索引
n

以相反的顺序存储你的系数

x^3 + x + 1 == 1 + x + x^3 <=> [1, 1, 0, 1]
x^3+x+1==1+x+x^3[1,1,0,1]
现在你所有的术语都会排成一行,
x^n
的系数位于索引
n