输出运算符没有产生预期的结果
Output operator is not producing expected outcome
我正在实现一个 class 多项式,其私有成员由一个单链表的系数和一个代表最高阶数的整数组成。构造函数接受一个表示多项式系数的向量。这是我对构造函数和输出运算符的实现。
#include <iostream>
#include <vector>
using namespace std;
struct Node{
Node(int data = 0, Node* next = nullptr) : data(data), next(next) {}
int data;
Node* next;
};
class Polynomial{
friend ostream& operator<<(ostream& os, const Polynomial& p);
public:
Polynomial(vector<int> poly){
Node* temp = co;
for(int i : poly){
temp = new Node(i);
temp = temp->next;
}
degree = poly.size() - 1;
}
private:
Node* co;
int degree;
};
ostream& operator<<(ostream& os, const Polynomial& p){
Node* temp = p.co;
int degree = p.degree;
while(temp != nullptr){
if(degree == 1){
os << temp->data << "x" << " ";
}else if(degree == 0){
os << temp->data;
}else{
os << temp->data << "x^" << degree << " ";
}
degree--;
temp = temp->next;
}
return os;
}
当我尝试测试我的代码时,输出是 686588744,我假设它指的是内存中的一个位置,而不是预期的结果 17。
int main(){
Polynomial p1({17});
cout << p1;
}
谁能指出我的代码哪里出错了?
这个构造函数
Polynomial(vector<int> poly){
Node* temp = co;
for(int i : poly){
temp = new Node(i);
temp = temp->next;
}
degree = poly.size() - 1;
}
无效。实际上它并没有建立一个列表。相反,它会产生大量内存泄漏。
例如,首先分配了一个节点并将其地址分配给指针temp
,然后将指针重新分配给存储在数据成员temp->next
中的值,该值是一个空指针.所以分配的节点地址丢失了。
此外,指针 co
未初始化。
你可以重写例如下面的方式
Polynomial( const vector<int> &poly) : co( nullptr ), degree( 0 )
{
Node **current = &co;
for( int i : poly )
{
*current = new Node(i);
current = &( *current )->next;
}
if ( not poly.empty() ) degree = poly.size() - 1;
}
我正在实现一个 class 多项式,其私有成员由一个单链表的系数和一个代表最高阶数的整数组成。构造函数接受一个表示多项式系数的向量。这是我对构造函数和输出运算符的实现。
#include <iostream>
#include <vector>
using namespace std;
struct Node{
Node(int data = 0, Node* next = nullptr) : data(data), next(next) {}
int data;
Node* next;
};
class Polynomial{
friend ostream& operator<<(ostream& os, const Polynomial& p);
public:
Polynomial(vector<int> poly){
Node* temp = co;
for(int i : poly){
temp = new Node(i);
temp = temp->next;
}
degree = poly.size() - 1;
}
private:
Node* co;
int degree;
};
ostream& operator<<(ostream& os, const Polynomial& p){
Node* temp = p.co;
int degree = p.degree;
while(temp != nullptr){
if(degree == 1){
os << temp->data << "x" << " ";
}else if(degree == 0){
os << temp->data;
}else{
os << temp->data << "x^" << degree << " ";
}
degree--;
temp = temp->next;
}
return os;
}
当我尝试测试我的代码时,输出是 686588744,我假设它指的是内存中的一个位置,而不是预期的结果 17。
int main(){
Polynomial p1({17});
cout << p1;
}
谁能指出我的代码哪里出错了?
这个构造函数
Polynomial(vector<int> poly){
Node* temp = co;
for(int i : poly){
temp = new Node(i);
temp = temp->next;
}
degree = poly.size() - 1;
}
无效。实际上它并没有建立一个列表。相反,它会产生大量内存泄漏。
例如,首先分配了一个节点并将其地址分配给指针temp
,然后将指针重新分配给存储在数据成员temp->next
中的值,该值是一个空指针.所以分配的节点地址丢失了。
此外,指针 co
未初始化。
你可以重写例如下面的方式
Polynomial( const vector<int> &poly) : co( nullptr ), degree( 0 )
{
Node **current = &co;
for( int i : poly )
{
*current = new Node(i);
current = &( *current )->next;
}
if ( not poly.empty() ) degree = poly.size() - 1;
}