Ich habe Probleme, meinen Kopf um das Konzept eines Zuweisungsoperators zu wickeln oder zumindest erfolgreich zu erstellen.Zuweisungsoperator für doppelt verknüpfte Liste in C++
Kopieren Konstruktoren sind kein Problem für mich; hier ist mein, dass seine Arbeits:
//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;
}
}
I Beispiel-Code las, und sah einige Leute die #include <algorithm>
Bibliothek verwendet, sie umzusetzen. Ich habe das stattdessen versucht, scheint aber überhaupt nicht zu funktionieren.
//assignment operator
Set& Set::operator=(const Set &rhs){
Set temp(rhs);
std::swap(temp._head,_head);
std::swap(temp._tail, _tail);
return *this;
}
Dieser obige Code funktioniert jedoch nicht korrekt. Wirklich kämpfen um das Konzept zu verstehen, wie Zuweisungsoperatoren gemacht werden. Ich dachte, es würde im Prinzip genauso funktionieren, wie du Werte von einem in einen anderen kopieren willst. Aber offensichtlich nicht. Wenn mir jemand Tipps geben könnte, wie es funktioniert, wäre das großartig.
Nur einige allgemeine Informationen über meine Klasse, gibt es a _head
und a _tail
, die auf den Anfang und das Ende der Liste zeigt. Dummy-Elemente.
Hier ist, wie das Objekt aufgebaut:
struct Elem {
ELEMENT_TYPE info;
Elem *prev, *next;
};
Elem *_head, *_tail;
int _size;
Nach unten und schließen Abstimmung für Nein [MCVE]. Zum Thema: Die ganze Welt des Potentials ist hier im Kopierkonstruktor verletzt: '_head = rhs._head; _tail = rhs._tail; 'Off-Thema: Achten Sie auf Unterstrichpräfixe. Sie sind im Allgemeinen für die interne Bibliotheksnutzung reserviert. Sie sollten hier sicher sein, aber tun Sie das im globalen Rahmen oder folgen Sie diesem Unterstrich mit einem Großbuchstaben und Sie könnten sich in Schwierigkeiten finden. – user4581301
Seufz, danke für den Downvote. Große Hilfe –
Warum implementieren Sie eine verknüpfte Liste manuell anstelle von 'std :: list'? –