Mam napisać klasę reprezentującą stertę dowolnych obiektów.
template<class typ>
class sterta {
public:
sterta(const typ&);
// ... pominmy troche kodu
void push(const typ&); // dodaje
private:
typ *wart;
int dlug;
};
Pomyślałem że zrobię to na tablicach, w najprostszy możliwy sposób.
template<class typ>
void sterta<typ>::push(const typ &value) {
int gdzie=0; // numer komorki tabeli gdzie dodamy
for(int n=0;n<dlug;n++) {
if(wart[n]>=value) gdzie = n+1; // szukamy wiekszej wartosci i wstawiamy za nia
}
typ *kopia;
kopia = new typ[dlug+1]; // robimy kopie z jednym elementem więcej
for(int n=0;n<gdzie;n++) { // kopiujemy do gdzie
kopia[n] = wart[n];
}
kopia[gdzie] = value;
for(int n=gdzie;n<dlug;n++) {
kopia[n+1] = wart[n];
}
if (wart) delete [] wart; // usuwamy stare
wart = kopia; // podmieniamy na nowa
dlug++;
}
O ile działa dla int czy float, to dla jakiś klas pojawiają się błędy z pamięcią. Gdzie tu jest błąd?