/* feedback bij reeks 4 * PROBLEEM : heap * INHOUD FEEDBACK : zeven korte opmerkingen bij gevonden code * TE DOEN : nagaan of je de commentaar verstaat * en bruikbaar vindt */ OPM 1 Gelezen in Heap::~Heap: delete data; Verbeterd: data ++ ; // in constructor stond data --; delete [] data; // omdat data pointer naar TABEL is ipv enkelvoudige var OPM 2 Gelezen in Heap::pop: T last = data[size]; data[size] = INT32_MIN; Verbeterd: Het element dat laatst in de tabel staat valt nu net buiten de heap (een copie zal op de juiste plaats in de heap terechtkomen). Gezien je NIET WEET waar het type T voor staat, kan je geen vervanging opperen voor dat laatste element. (Als 'T' staat voor 'Zangvogel', wat is de Zangvogel met waarde INT32_MIN dan?) Laat dit element gewoon ongewijzigd; de heap kent z'n size, dus zal dit element niet meer raadplegen (enkel overschrijven bij push) OPM 3 Gelezen in Heap::pop: int new_pos = 1; int child1 = 2*new_pos, child2 = 2*new_pos + 1; while((last < data[child1] && child1 <= size) || (last < data[child2] && child2 <= size)){ // grootste van de twee kinderen selecteren en in parent plaatsen if(child1 <= size && child2 <= size){ data[new_pos]= (data[child1] < data[child2])? data[child2]:data[child1]; } else if(child1 <= size){ data[new_pos] = data[child1]; } else{ data[new_pos] = data[child2]; } /* nieuwe uitgangspositie bepalen en * nieuwe kindindexen bepalen */ new_pos=(data[child1] < data[child2])? child2:child1; child1 = 2*new_pos, child2 = 2*new_pos + 1; } data[new_pos] = last; Commentaar: Het bepalen van het grootste kind komt tweemaal voor: een keertje bij het klaarzetten voor de nieuwe doorloop van de lus, en een keertje bij toewijzing van data[new_pos]. Als een berekening tweemaal voorkomt, bewaar je het resultaat beter in een variabele. bvb. grootste_kind. Dus: grootste_kind = 2*new_pos; if(grootste_kind+1 <= size && data[grootste_kind]