====== 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;