Spis treści

Szablony

Szablon funkcji

template <class Typek>
Typek& pewna_funkcja(Typek x)
{
    return x;
}

Szablon klasy

template <class Typek>
class Klasa
{
   Typek *x;
   void Metoda();
}

Szablon funkcji składowej (metody)

template <class Typek>
void Klasa<Typek>::Metoda()
{
 
}

Wzorzec klasy Wektor

Zaimplementuj szablon klasy Wektor, który w dynamicznie przydzielonej tablicy o określonym rozmiarze, przechowuje elementy dowolnego typu. Klasa ta powinna implementować następujące metody:

Przykładowy kod testujący klasę:

Wektor<int> liczby;
for(int i=0;i<100;i++) liczby.Dodaj(i);
cout << "Rozmiar " << liczby.Rozmiar() << " elementow " << liczby.IleElementow() << endl;
 
float wsp[]={1,2,3,4,5};
Wielomian w1(wsp,4);
 
Wektor<Wielomian> wektor_wielomianow;
for(int i=0;i<100;i++) 
{
   Wielomian w2=w1 * liczby[i];
   wektor_wielomianow.Dodaj(w*i);
}
 
cout << "Wyswietlam pewien wielomian : " << wektor_wielomianow[5] << endl;

Zadania dodatkowe
Dodaj do klasy Wektor:

Iterator

Dodaj do klasy Wektor:

W tym przypadku iterator swobodnego dostępu będzie po prostu wskaźnikiem typu T*. Wystarczy więc przezwać ten typ używając polecenia typedef.

Przykładowe użycie:

Wektor<int> wektor;
for(int i=0 ; i<100 ; i++) wektor.Dodaj(i);
 
Wektor<int>::iterator it;
for(it=wektor.begin() ; it!=wektor.end() ; it++) cout << *it << endl;

Dodatkowe zadania

  1. Zaimplementuj szablon klasy realizujący listę jednokierunkową przechowującą elementy typu określonego przez parametr szablonu.
  2. Zaimplementuj szablon klasy realizujący kolejkę przechowującą elementy typu określonego przez parametr szablonu. Do implementacji stosu wykorzystaj szablon listy z poprzedniego zadania.
  3. Zaimplementuj szablon klasy realizujący stos przechowującą elementy typu określonego przez parametr szablonu. Do implementacji stosu wykorzystaj szablon Wektor z zajęć.
  4. Zaimplementuj szablon słownika przechowującego elementy sparametryzowane przez dwa typy: typ klucza i typ wartości przypisanej do klucza. Elementy w drzewie układane są w porządku wartości kluczy. Zakładamy, że dla typu klucza zawsze jest zdefiniowany operator porównania <.