Spis treści

Iteratory

int tab [] = {42, 3, 5};
 
for(auto x: tab) 
{
  cout << x << endl;
}
 
for(auto &x: tab) 
{
  x++;
}

Ćwiczenie: Iteratory klasy Wektor

Dodaj do szablonu klasy Wektor z poprzednich zajęć (plik wektor.h):

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 lub using.

Napisz program, który przetestuje działanie iteratorów w klasie Wektor:

Obsługa wyjątków

Przykład:

try
{
   int a=1;
   throw a;
}
catch(int b)
{
   // wyjatek typu int
}
catch(...)
{
   // wszystkie wyjatki
}

Ćwiczenie: Wyjatkowe sytuacje klasy Wektor

W pliku nagłówkowym wyjatki.h zadeklaruj klasy wyjątków: Wyjatek, ZlyIndeksWektora i BrakPamieci i dodaj do szablonu klasy Wektor polecenia rzucające obiekty tych klas w razie zaistnienia sytuacji wyjątkowych.

W zależności od konfiguracji, operator new w przypadku wystąpienia błędu może także rzucać wyjątek. Można temu zapobiec wymuszając aby w przypadku błędu operator ten zwracał NULL.
#include <new.h>
int *a = new(std::nothrow) int[1];
if(a==0) throw "Brak pamieci";

Napisz program, który wywoła sytuacje wyjątkowe dla klasy Wektor i spowoduje rzucenie wyjątków ZlyIndeksWektora oraz BrakPamieci. Złap wyjątki i wypisz komunikat błedu.

Zadanie 9: Sortowanie liczb i słów

Napisz program, który dokona posortowania liczb i wyrazów podanych przez użytkownika. Dane wejściowe (liczby i wyrazy) podaje użytkownik w konsoli, wpisując kolejne linie tekstu, przy czym każda linia może zawierać dowolny ciąg znaków. Jeżeli podana linia tekstu zawiera poprawnie wyrażona liczbę rzeczywistą to wówczas traktowana jest jak wartość numeryczna a nie jako łańcuch znakowy. Napis zawierający liczbę zamieniany jest na wartość numeryczną za pomocą funkcji stod(). Jeżeli operacja zakończy sie powodzeniem, wówczas liczba umieszczana jest w kolekcji z liczbami. Jeżeli operacja się nie powiedzie, gdyż napis nie zawiera liczby (funkcja w tym wypadku rzuca wyjątek std::invalid_argument) to analizowana linia tekstu dodawana jest do kolekcji napisów. Jeżeli podana liczba wykracza poza zakres typu double (funkcja w tym wypadku rzuca wyjątek std::out_of_range) to linia jest ignorowana (nie jest traktowana ani jak liczba ani jak napis). Program kończy wczytywanie danych, gdy użytkownik wprowadzi pustą linię (tj. wczytany napis będzie miał długość 0). Po tym wypisywana jest sekwencja wszystkich rozpoznanych liczb w porządku rosnących wartości a nastepnie wypisywana jest sekwencja wszystkich pozostałych linii tekstu w porządku alfabetycznym. Do posortowania obu sekwencji wykorzystaj funkcję sort() z biblioteki STL.

Przykład działania programu:

zxcvbn
1234
asdf
42
3.14
qwerty
10e100000
10e2

Liczby:
3.14
42
1000
1234

Napisy:
asdf
qwerty
zxcvbn

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