++) i dwukierunkowy (operator ++ i --)+, +=, -, -=, []. <, >, <=, >=rbegin() i rend()for zakresowa od C++11int tab [] = {42, 3, 5}; // odczyt kolekcji for(auto x: tab) { cout << x << endl; } // modyfikacja kolekcji for(auto &x: tab) { x++; }
Rozszerz implementację szablonu klasy Wektor z poprzednich zajęć (plik wektor.h) dodając do niej obsługę iteratorów.
Klasa Wektor powinna udostępniać:
Wektor::iterator, który udostępnia operator it++ przesuwający iterator do następnego elementu sekwencji i operator *it wydobywający wskazywany element begin() zwracającą iterator bezpośredniego dostępu pokazujący na pierwszy element end() zwracająca iterator pokazujący za ostatnim elementemtypedef lub using.
Napisz program, który przetestuje działanie iteratorów w klasie Wektor:
for zakresowejPrzykład:
try { int a=1; throw a; } catch(int b) { // wyjatek typu int } catch(...) { // wszystkie wyjatki }
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.
Wyjatek, stanowi ogólną klasę wyjątków po której będą dziedziczyły wszystkie inne typy wyjątków. Klasa ta zawiera:string przechowujące komunikat o błędzie. throw Wyjatek(„Pojawil sie nieoczekiwany blad!”). Komunikat() zwracająca tekst komunikatu. ZlyIndeksWektora dziedziczy po klasie Wyjatek. BrakPamieci dziedziczy po klasie Wyjątek. 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";
BrakPamieci i ZlyIndeksWektora dziedziczą po klasie Wyjatek, więc:Komunikat() zwracając tekst odpowiednio sformatowany z zależności od sytuacji (od typu obiektu).
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.
Napisz program, który posortuje liczby i wyrazy wprowadzone przez użytkownika.
Dane wejściowe:
double Zasady przetwarzania danych:
double' za pomocą stod() zakończy się sukcesem, liczba jest dodawana do kolekcji liczbstd::invalid_argument - wtedy linia trafia do kolekcji napisówdouble (funkcja rzuca wyjątek std::out_of_range), linia jest ignorowana (nie trafia ani do liczb, ani do napisów)Wynik działania programu:
Program przestaje wczytywać dane, gdy użytkownik wprowadzi pustą linię (długość napisu równa 0). Następnie program wypisuje:
Do kolekcjonowania napisów i liczb wykorzystaj klasę Wektor a do posortowania obu sekwencji wykorzystaj funkcję sort() z biblioteki STL.
Przykład działania programu:
Dla danych wejściowych
zxcvbn 1234 asdf 42 3.14 qwerty 10e100000 10e2
program wypisze
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