Hoi,
Je was inderdaad vergeten om it++ te schrijven of het einde van je while lus. Je code zou als volgt wel werken.
Code: Select all
list<int>::iterator it = l.begin() // start bij het begin
while( it != l.end() ) { // drukt af zolang de iterator het einde niet bereikt heeft
cout << *it << " ";
it++;
}
Je moet die it++; schrijven omdat dit commando er voor zorgt dat je pointer wijst naar het volgende element in de lijst. Als je niet gaat wijzen naar het volgende element in de lijst, dan blijf je heel de tijd op dezelfde plek in de lijst hangen, en geraak je nooit uit de while loop. Je kan pas uit je while loop geraken, als je door heel de lijst gewandeld hebt.
Je regel while ( it != l.end() ) { ... } wil eigenlijk zeggen in mensentaal "doe het volgende, en blijf het maar tot in het oneindige herhalen zolang dat je pointer niet wijst naar het
past-the-end element in de lijst. Dat
past-the-end-element kan je bekijken als een soort van extra element dat helemaal achteraan in de lijst zit als aller aller aller laatste element (jij hebt het element er niet ingestopt) en dat enkel maar dient om de lijst te laten merken dat hij op het einde zit
. Dus stel je hebt een lijst met daarin de getallen 1,5,7,9.
Dat zal *it eerst zijn: 1 (*it betekent letterlijk, waar it naar wijst)
Daarna zal *it zijn: 5 (*it betekent letterlijk, waar it naar wijst)
Daarna zal *it zijn: 7 (*it betekent letterlijk, waar it naar wijst)
Daarna zal *it zijn: 9 (*it betekent letterlijk, waar it naar wijst)
Daarna zal *it zijn:
past-the-end-element
l.end() returned eigenlijk gewoon het
past-the-end-element. Hij blijft dus in de while-lus zo lang dat it niet gelijk is aan het past the end element. Natuurlijk mag je niet vergeten om telkens je pointer naar het volgende element te laten wijzen, en dat doe je via it++
.
Hoe het komt dat it++ ervoor zorgt dat je pointer it zal wijzen naar het volgende element in de lijst, hoef je voorlopig nog niet te weten denk ik. Dat heeft te maken met pointer arithmetic, maar zal je later wel begrijpen.
PS: eender welk commando dat je uitvoert (een element toevoegen, verwijderen, ...), de gegevensstructuur zorgt er steeds voor dat het
past-the-end element steeds als het ware op het einde van de lijst blijft zitten.