代入演算子の概念を頭に入れたり、少なくともそれらを正常に作成するのに問題があります。C++の二重リンクリストの代入演算子
コピーコンストラクタは私にとって問題ではありません。私は、サンプルコードを読んでいた
//copy constructor
Set::Set(const Set &rhs){
_head = rhs._head;
_tail = rhs._tail;
//null, basically this object is 0
if(rhs._head == NULL){
_head = NULL;
_tail = NULL;
_size = 0;
}else{
_head = new Elem(*rhs._head);
_tail = new Elem(*rhs._tail);
_size = rhs._size;
Elem *prev = NULL;
Elem *curr = _head;
Elem *otherCurr = rhs._head;
int counter = 0;
while(otherCurr->next != NULL){
curr->next = new Elem(*otherCurr->next);
curr->next->prev = curr;
curr = curr->next;
otherCurr = otherCurr->next;
}
//now that we are done lets setup the tail
_tail->prev = curr;
curr->next = _tail;
}
}
、及び一部の人々はそれを実装するために#include <algorithm>
ライブラリを使用しました:ここにその作業という私のものです。私は代わりにそれを試みたが、全く動作していないようだ。
//assignment operator
Set& Set::operator=(const Set &rhs){
Set temp(rhs);
std::swap(temp._head,_head);
std::swap(temp._tail, _tail);
return *this;
}
このコードは正しく動作しません。代入演算子の作成方法の概念を理解することは本当に苦労しています。私はそれが基本的にあなたが1つから別の値をコピーしたいと同じように動作すると思った。しかし明らかにそうではありません。もし誰かがそれを得る方法について私にアドバイスできたら、それはすばらしいことになるでしょう。
私のクラスのちょっとした情報は、リストの先頭と末尾を指すa _head
とa _tail
です。ダミー要素。ここで
は、オブジェクトが構成されている方法です:
は、私はあなたのコピーコンストラクタを持つ2つの問題を参照してくださいstruct Elem {
ELEMENT_TYPE info;
Elem *prev, *next;
};
Elem *_head, *_tail;
int _size;
[mcve]を無効にして投票を終了します。トピック:コピーコンストラクタ内の潜在的な傷害の全世界: '_head = rhs._head; _tail = rhs._tail; 'トピックオフ:アンダースコアのプレフィックスで注意してください。これらは通常、内部ライブラリの使用のために予約されています。あなたはここで安全でなければなりませんが、グローバルスコープでそれを行うか、大文字でその下線をたどってください。あなたは困っているかもしれません。 – user4581301
一言、downvoteのおかげで。大きな助け –
なぜ 'std :: list'を使うのではなく、手動でリンクリストを実装していますか? –