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.