尝试添加两个向量,但添加顺序错误
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
。
【讨论】:
以上是关于尝试添加两个向量,但添加顺序错误的主要内容,如果未能解决你的问题,请参考以下文章