====== Szablony ======
**Szablon funkcji**
template
Typek pewna_funkcja(Typek x)
{
return x;
}
**Szablon klasy**
template
class Klasa
{
Typek *x;
void Metoda();
}
**Szablon funkcji składowej (metody)**
template
void Klasa::Metoda()
{
}
===== Wzorzec klasy Wektor =====
Zaimplementuj szablon klasy ''Wektor'', która jest pojemnikiem przechowującym dowolną ilość elementów pewnego typu (typ elementów jest parametrem szablonu klasy).
Klasa ta powinna implementować następujące metody:
* konstruktor domyślny, inicjuje Wektor o pojemności 20 elementów.
* konstruktor ''**Wektor(int rozmiar)**'' inicjuje wektor o podanej pojemności
* operator ''**[]**'' pozwalający odwołać się do konkretnego elementu wektora
* ''**IleElementow**'' zwraca ilość elementów (nie pojemność wektora)
* ''**Rozmiar**'' podaje pojemność wektora
* ''**Dodaj**'' umieszcza element na końcu wektora (jeśli pojemność wektora jest za mała należy ją zwiększyć, np. dwukrotnie).
* ''**Usun**'' usuwa ostatni element wektora.
* ''**Wyczysc**'' usuwa wszystkie elementy z wektora
* destruktor
Przykładowy kod testujący klasę:
Wektor 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 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:
* konstruktor kopiujący
* przeciążoną metodę ''**Dodaj**'' pozwalającą dodać element na dowolnej pozycji (od 0 do ''ile_elemntow'').
* przeciążoną ''**Usun**'' usuwającą element z wybranej pozycji. Metoda powinna zwracać usuwany element.
* dociąż operator << wypisujący zawartość wektora do strumienia (zakładamy, że dla typu składowego wektora istnieje dociążony odpowiednio operator <<)
===== Iterator =====
Dodaj do klasy Wektor:
* iterator o swobodnym dostępie ([[http://www.sgi.com/tech/stl/RandomAccessIterator.html|random access iterator]])
* metody begin() i end() zwracające iterator (bezpośredniego dostępu) pokazujący odpowiednio na pierwszy element oraz na pozycję za ostatnim elementem.
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 wektor;
for(int i=0 ; i<100 ; i++) wektor.Dodaj(i);
Wektor::iterator it;
for(it=wektor.begin() ; it!=wektor.end() ; it++) cout << *it << endl;