19.03.2011 | 15:33
To je inicijalizacija varijable key (key(_key) znači key=_key). Ovaj kod
Element(int _key) : key(_key) // konstruktor
je radi isto što i
Element(int _key) // konstruktor
{
key = _key;
ali postoji jedna razlika. Prilikom pozivanja prvog koda, parametri konstruktora se stavljaju na stog. Zatim se, prije no što počne tijelo konstruktora, varijabla key inicijalizira na vrijednost danu parametrom. U drugom slučaju varijabla key se prije inicijalizira na neku slučajnu vrijednost, a u konstruktoru se inicijalizira na zadanu vrijednost. To su ustvari dvije inicijalizacije, pa je prvi kod brži. Takvo objašnjenje pročitao sam u knjizi/clanku B. Stroustrupa ali se vise ne sjecam kojem.
(Ovo je vezano uz initialization vs. assignment pogledaj ovdje
http://www.parashift.com/c++-faq-lite/ctors.html).
Na drugo pitanje već imaš odgovor (smayoo), pa neću ponavljati. No, evo za razmišljanje par izraza:
tmp->prev->next == tmp
tmp->next->prev == tmp
tmp->prev->next->next == tmp->next
Sad vidim da sam ispustio rubne slučajeve kod brisanja. Dodaj u kod dvije linije tako da bude:
if(tmp->prev != NULL) tmp->prev->next = tmp->next;
if(tmp->next != NULL) tmp->next->prev = tmp->prev;
if(tmp == head) head = head->next;
if(tmp == tail) tail = tail->prev;
...
Nadam se da je sad jasnije.