template<classtyp>//większa uniwersalnosć - szablonclassstos{typ*tab;//do przechowywania danych użyję dyanamicznie przydzialanej pamięcilongsize;//ile elementów możemy pomieścić w stosielongwybrany;//numer pierwszego wolnego elementuvoidpowiekszSie();//jeśli braknie miejsca, stos się powiększypublic:stos();//konstruktor domyślnystos(longrozm);//tu możemy określić ile elementów będzie można pomieścić~stos();//destruktor (zwróci zaalokowaną pamięć)voidpush(typ&co);//funkcja do umieszczania elementu na stosievoidpop();//funkcja do zdejmowania elementu ze stosuconsttyp&top();//funkcja zwraca to co jest na górze stosu};template<classtyp>stos<typ>::stos(){wybrany=0;//na początku stos jest pustysize=10;//na starcie dajemy możliwość wrzucenia 10 elementówtab=newtyp[size];//dynamicznie przydzielana pamięćif(tab==NULL)//coś się nie powiodło przy alokacji pamięci{throw"Błąd alokcacji pamięci!";//rzucamy wyjątek}}template<classtyp>stos<typ>::stos(longrozm){wybrany=0;//na stosie pustosize=rozm;//ustawiamy zgodnie z zyczeniemtab=newtyp[size];//tak jak wyżejif(tab==NULL){throw"Błąd alokacji pamięci!";}}template<classtyp>stos<typ>::~stos(){delete[]tab;//zwalniamy pamięć }template<classtyp>voidstos<typ>::push(typ&co){if(wybrany==size)//jeśli kończy się miejscepowiekszSie();//stos się powiększatab[wybrany]=co;//umieszczamy element na stosie}template<classtyp>voidstos<typ>::pop(){wybrany--;//nie kasujemy obiektu, ale przy wywołaniu push, i tak będzie nadpisany}template<classtyp>consttyp&stos<typ>::top(){returntab[wybrany];//zwracamy to co jest na szczycie (wybrany wskazuje na pierwszy WOLNY element tablicy, daltego zmniejszam o 1)wybrany++;}template<classtyp>voidstos<typ>::powiekszSie(){typ*nowa=newtyp[size+10];//nowa tablica jest o 10 el. większafor(inti=0;i<size;++i)nowa[i]=tab[i];//kopiujemy starą tablicę do nowejdelete[]tab;//starą tablicę możemy skasowaćtab=nowa;//teraz tab pokazuje na nową, większą tablicęsize+=10;//trzeba zapisać o ile powiększyliśmy tablicę}