【问题标题】:Trying to add two vectors but it is adding in the wrong order尝试添加两个向量,但添加顺序错误
【发布时间】:2019-11-01 15:13:54
【问题描述】:

在这个函数中,我正在研究的目标是添加多项式的系数,系数存储在向量中。 P 是我创建的 Polynom 类的私有成员。 “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

这基本上意味着我想从后面添加向量(希望这是有道理的)

不幸的是,这不是我使用这段代码得到的输出。关于我所缺少的任何提示?

【问题讨论】:

    标签: c++ class vector


    【解决方案1】:

    让事情变得更简单,简单地拆分两种情况:

    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);
    }
    

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

    【讨论】:

      【解决方案2】:

      以相反的顺序存储您的系数。

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

      现在您的所有项将始终对齐,x^n 的系数位于索引 n

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多