Spis treści

Szablony

Szablon funkcji

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

Szablon klasy

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

Szablon funkcji składowej (metody)

template <typename Typek>
Typek& Klasa<Typek>::Metoda()
{
 
}

Przykład użycia

int a = 5;
a = pewna_funkcja(a);
 
Wielomian w;
Wielomian w2 = pewna_funkcja(w);
 
Klasa<int> obiekt;
Klasa<int> *wsk = new Klasa<int>();

Ćwiczenie: szablon klasy Wektor

Zaimplementuj szablon klasy Wektor, która jest pojemnikiem przechowującym kolekcję elementów pewnego typu (typ elementów jest parametrem szablonu klasy). Wektor udostępnia elementy kolekcji w identyczny sposób jak tablica ale jest strukturą dynamiczną, która zwiększa automatycznie swój rozmiar w miarę dodawania nowych elementów.

Klasa Wektor składa się z następujących pól:

Klasa udostępnia 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;

Napisz program, który wykorzysta klasę Wektor do przechowywania linii tekstu wczytanych z pewnego pliku tekstowego. Na początku działania program prosi o podanie nazwy pliku, następnie program wczytuje kolejne linie tekstu z podanego pliku i umieszcza je w wektorze. Po przeczytaniu całej zawartości pliku program wypisuje na konsoli elementy wektora w odwrotnej kolejności, tj. program wypisuje zawartość pliku z odwróconą kolejnoscia linii.

Przydatne funkcje:

Zadanie 8: Szablon funkcji

1. Zaimplementuj szablon funkcji o nazwie zamien służącej do zamiany dwóch wartości podanych w argumentach. Przykładowo, dla dwóch obiektów a i b wywołanie funkcji

zamien(a, b)

spowoduje, że obiekt a przyjmie wartość obiektu b, a obiekt b przyjmie wartość obiektu a.

2. Zaimplementuj funkcję szablonową sortuj() służącą do sortowania elementów kolekcji Wektor. Funkcję sortuj() możesz zrealizować w postaci funkcji składowej szablonu klasy Wektor lub jako funkcję globalną, która sortuje wektor podany w argumencie. Wywołanie funkcji układa elementy kolekcji w porządku od najmniejszego do największego. Zakładamy, że obiekty znajdujące się w wektorze posiadają zdefiniowany operator mniejszości < pozwalający je porównać. Spróbuj samodzielnie wymyślić algorytm sortowania. Do zamiany położenia elementów kolekcji wykorzystaj funkcję szablonową zamien z poprzedniego punktu.

Napisz program, który wykorzysta klasę Wektor oraz szablon funkcji sortuj() do posortowania liczb zawartych w pliku tekstowym. Nazwę (ścieżkę) pliku podaje użytkownik na początku działania programu. Program czyta liczby z pliku i umieszcza je w wektorze. Po wczytaniu wszystkich liczb kolekcja podlega sortowaniu a wynik wypisany jest na ekranie. Zakładamy, że plik wejściowy zawiera ciąg liczb rzeczywistych odseparowanych białymi znakami.

Przykładowy plik z danymi wejsciowymi: liczby.txt

Jeśli masz problem z wymyśleniem działającego algorytmu sortowania to skorzystaj z algorytmu sortowania bąbelkowego

Rozwiązanie w postaci plików nagłówkowych *.h i źródłowych *.cpp umieść w Moodle Zadanie 8