++
) 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