试图添加两个矢量,但添加顺序错误



在这个函数中,我正在处理的目标是添加多项式的系数,系数存储在向量中。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

在另一个向量中:(-4((0((1(

得到的矢量应该是:(4((2((-1((2(-4((0((3((1+2(=3(0+-4(=-4

这基本上意味着我想从后面添加向量(希望这有意义(

不幸的是,这不是我从这段代码中得到的输出。关于我缺少什么,有什么建议吗?

简化并简单地拆分两种情况:

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

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

以相反的顺序存储系数。

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

现在,所有的项总是排成一行,x^n的系数在索引n处。

最新更新