[英]Is this a deep copy and properly implemented = operator for a C++ Linked List?
[英]c++ making a deep copy of a linked list
我正在編寫一個程序,可以對多項式進行各種運算。 多項式是由節點對象組成的鏈表。 對象“節點”具有兩個數據成員,m_coefficient和m_degree顯然是每個單項式的系數和程度。 對於項目,我可以執行功能。 我有默認的構造函數,我相信我已經正確實現了。
Polynomial :: Polynomial(){
Node *m_head = NULL;
}
節點* m_head是多項式對象的唯一數據成員。
我現在有這個應該是副本構造函數:
Polynomial :: Polynomial(const Polynomial& p)
如何使用它來復制原始鏈表的深層副本。
編輯:
這是Node類:
class Node {
public:
Node();
Node(long coeff, unsigned int deg);
long m_coefficient;
unsigned int m_degree;
Node *m_next;
};
構造函數可以如下所示
Polynomial :: Polynomial(const Polynomial& p) : m_head( nullptr )
{
Node **last = &m_head;
for ( Node *current = p.m_head; current; current = current->next )
{
*last = new Node( current->m_coefficient, current->m_degree );
( *last )->m_next = nullptr;
last = &( *last )->m_next;
}
}
另外,最好將Node
類作為一個聚合。 例如
struct Node
{
long m_coefficient;
unsigned int m_degree;
Node *m_next;
};
在這種情況下,您可以編寫例如
*last = new Node { current->m_coefficient, current->m_degree, nullptr };
那是構造函數的樣子
Polynomial :: Polynomial(const Polynomial& p) : m_head( nullptr )
{
Node **last = &m_head;
for ( Node *current = p.m_head; current; current = current->next )
{
*last = new Node { current->m_coefficient, current->m_degree, nullptr };
last = &( *last )->m_next;
}
}
我想你是說
Polynomial :: Polynomial() : m_head( nullptr )
{
}
要么
Polynomial :: Polynomial()
{
m_head = nullptr;
}
否則,您將在構造函數的主體中初始化局部變量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.