尝试添加两个向量,但添加顺序错误

Posted

技术标签:

【中文标题】尝试添加两个向量,但添加顺序错误【英文标题】: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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于尝试添加两个向量,但添加顺序错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将命名向量作为行添加到数据框中,根据列名顺序重新排序?

如何在 Keras 中将顺序模型添加到预训练模型?

类似矢量但已排序的数据类型

领域:记录顺序已更改

为啥添加两个 .OrderBy(或 .OrderByDescending)语句会以相反的顺序应用排序?

我交换这个向量的顺序的方式是错误的吗?