Laboratorium 7

Transkrypt

Laboratorium 7
Zad.1
Zdefiniować szablony funkcji: sortującej tablicę, wypisującej elementy tablicy oraz szukającej i
zwracającej indeks elementu maksymalnego i minimalnego. Przetestować działanie funkcji dla
tablicy, której elementy generowane są losowo.
Zad.2
Zdefiniować szablon klasy reprezentującej tablicę o dowolnym rozmiarze danych dla dowolnego
typu wbudowanego.. Przeciążony operator indeksowania, przypisania i zapisania w strumieniu.
template<class T>
class Array {
private:
T *buf;
int len;
public:
Array(int size);
Array(const Array<T> &a);
~Array();
T& operator[](int index) const;
int length() const;
void operator=(const Array<T> &a);
};
template<class T>
ostream& operator<<(ostream &o, const Array<T> &a);
int main()
{
Array<int> a(4);
Array<double> *b = new Array<double>(3);
a[0] = 1; a[1] = 2; a[2] = 3; a[3] = 4;
(*b)[0] = 1.0; (*b)[1] = 2.0; (*b)[2] = 3.0;
cout << a << endl;
cout << *b << endl;
delete b;
return 0;
}
Zad.3
Zaimplementować szablon funkcji, która odwróci kolejność elementów w podanym obiekcie klasy
Array z zadania 2. Przetestować funkcję na tablicach zawierających liczby całkowite i łańcuchy
tekstowe.
Zad.4
Zmodyfikować klasę Array tak, aby możliwa była zmiana rozmiaru tablicy (dodać metodę
Resize(int newsize)), przy czym zmiana rozmiaru ma zachowywać elementy w tablicy od elementu
0 do min{len, newsize}. Zmodyfikować funkcję main z zadania 2 tak, aby sprawdzić poprawność
zaimplementowanej zmiany rozmiaru tablicy.
Zad.5
Zaimplementować szablony klas reprezentujące listę podwójnie wiązaną. W programie powinien
znaleźć się szablon klasy List, zawierający pojedynczy element listy zawierający pole danych oraz
wskaźniki na element poprzedni i następny, wskaźniki na głowę i ogon listy, aktualny rozmiar listy
oraz metody służące do dołączania elementów na początku i na końcu listy oraz wyjmowania
elementów z początku i końca listy. Próba wyjęcia elementu z pustej listy powinna zwracać NULL
Dodatkowo proszę zaimplementować metody wstawiające element przed i za elementem o
podanym numerze oraz operator indeksowania, aby możliwy był dostęp do elementu listy o
podanym indeksie.
Zad. 6
Zakładając, że lista z zadania 5 została zaimplementowana, proszę zaimplementować szablon
funkcji sortującej elementy listy. Funkcja jako parametr powinna przyjmować obiekt klasy List i
zwracać nowy obiekt klasy List, zawierający posortowaną listę.
Zad. 7
Zaimplementować przeciążony operator zapisu listy do strumienia wyjściowego. Przetestować
klasy z zadań 5 i 6 oraz zaimplementowany operator zapisu do strumienia na listach zawierających
dane liczbowe (całkowite i rzeczywiste).
Zad.8
Przeciążyć operator dodawania dla obiektów klasy Array z zadania 2. Dla tablic t1 i t2 operator
powinien zwracać tablicę powstałą przez dołączenie tablicy t2 na koniec tablicy t1. Same tablice t1
i t2 (operandy) powinny pozostać nietknięte.