Permalänk
Hedersmedlem
Skrivet av Lexdale:

hm, så här står det
ny 0x0041108 .......
tail 0xccccccc [value = ??? next = ??? prev = ???
[här] står det att value, next och prev <unable to read memory>

så jag antar att du menar att det är nånting fel här, men jag hänger inte med var det är

Vad fanns i den gamla konstruktorn som inte finns i den nya?

Permalänk
Medlem
Skrivet av Elgot:

Vad fanns i den gamla konstruktorn som inte finns i den nya?

jaha! menar du detta?

linked_list::linked_list() { head = 0; tail = 0; }

: head(nullptr), tail(nullptr)

detta gjorde susen! det känns lite magiskt just nu

jag antar att detta är snabb-sättet för att alternativt skriva om koden

head = 0; tail = 0;

och lägga den inuti copyconstructorn ?

och att båda fungerar?

och tack bedragaren_no1
och tack Elgot som gör att jag måste använda hjärncellerna men otroligt bra!

jag hade knappast kommit på vad felet hade varit på egen hand

Permalänk
Hedersmedlem
Skrivet av Lexdale:

jaha! menar du detta?

linked_list::linked_list() { head = 0; tail = 0; }

Just det. Om du inte sätter dem till något (förslagsvis 0, då det är vad du testar mot) kan de innehålla vad som helst när man kör push_back första gången, vilket typiskt innebär att
(head == 0) && (tail == 0)
inte är sant.

Permalänk
Medlem

Funderingar kring den sista delen med överlagringsoperatorn

linked_list & linked_list::operator =( const linked_list & rhs) { if(this == &rhs) { return *this; } }

fick denna början av handledaren.
jag förstår att jag ska kunna skriva i main

linked_list list4;
list 4 = list3;

men jag förstår egentligen inte vad som är skillnaden på denna funktion och deepcopy funktionen. båda gör väl samma sak? dvs deepcopy
den lilla skillnaden som jag ser nu är att = används. Men jag hade väl lika gärna kunnat använda list4(list3); ?

Permalänk
Hedersmedlem

Ofta finns det väl många sätt att åstadkomma samma sak, men en tilldelningsoperator förväntar man sig väl nästan av varje anständig klass. Kanske vill man kunna göra saker som

list4 = list3; ... list4 = list2; ... list4 = list3;

och det står ju dessutom att man ej skall läcka minne.

Permalänk
Medlem

Jag har gjort denna länkade lista. Läser du på Mittuniversitetet?

Permalänk
Medlem

Skulle rekommendera att du läser på om vectorer eller mappar istället för att använda en länkad lista då det nästan alltid är mer effektivet med en vector.

Permalänk
Medlem
Skrivet av Oden12:

Skulle rekommendera att du läser på om vectorer eller mappar istället för att använda en länkad lista då det nästan alltid är mer effektivet med en vector.

Det beror helt på situationen, vad som skall samlas upp, sorteras och sökas på. Jag rekommenderar Knuth Volym 3.

Nu var väl dessutom skoluppgiften att implementera en länkad lista, så att då lämna in en vector-implementation verkar onödigt.