Ćwiczenie 5: Iteratory

Ćwiczenie 5. polega na zaimplementowaniu iteratora o dostępie swobodnym dla pojemników wykonywanych podczas ćwiczeń 3, 4.

Po co

  • Doskonalenie umiejętności definiowania szablonów.
  • Zapoznanie się z podstawowymi strukturami danych.
  • Doskonalenie umiejętności przeładowywania operatorów.
  • Zapoznanie się z konstrukcją iteratorów.

Oddawanie ćwiczenia

  • Przed oddaniem ćwiczenia, program należy przetestować używając następującego pliku main: ex5.zip
  • Powyższy plik wymaga istnienia pliku aghInclude.h poprzez który włączane są wszystkie niezbędne pliki.

Przebieg ćwiczenia

  1. Wykonanie ćwiczenia polega na zdefiniowaniu szablonu iteratora dla pojemników wykonanych w trakcie poprzednich ćwiczeń.
  2. Budujemy klasę aghIterator, która będzie reprezentować szablon iteratora.
  3. Do realizacji ćwiczenia nie można wykorzystywać już gotowych rozwiązań (STL, Qt, tip).
  4. Klasa powinna umożliwiać „pokazywanie” iteratorem na dowolny z zaprojektowanych trakcie poprzednich ćwiczeń pojemników.
  5. Obiekt klasy aghIterator powinien wykazywać zachowanie maksymalnie zbliżone do zwykłego wskaźnika.
  6. Klasa powinna implementować następujące metody:
    • first() - zwraca iterator pokazujący na pierwszy element w pojemniku.
    • last() - zwraca iterator pokazujący na ostatni element w pojemniku.
    • next() - przesuwa iterator na następny element.
    • prev() - przesuwa iterator na poprzedni element.
    • current() - zwraca aktualnie pokazywany element w pojemniku, oraz umożliwia zmianę wartości tego elementu.
    • atFirst() - przenosi iterator na pierwszy element w pojemniku.
    • atLast() - przenosi iterator na ostatni element w pojemniku.
    • size() - zwraca ilość elementów od aktualnie pokazywanego do ostatniego elementu w pojemniku.
  7. Staramy się aby obiekt iteratora zachowywał się jak zwyczajny wskaźnik, tzn. powinien umożliwiać następującą składnię zapisu:
    (iterator - obiekt iteratora, pojemnik - obiekt pojemnika na który pokazuje iterator, i - dowolna liczba całkowita, b - typ parametryczny przechowywany przez obiekt pojemnika):
    • iterator = &pojemnik - ustawia pojemnik na który iterator pokazuje.
    • if((int)iterator == NULL) - sprawdzenie czy iterator pokazuje na pojemnik, ewentualnie czy pojemnik zawiera przynajmniej jeden element oraz czy aktualnie pokazywany element jest poprawny.
    • *iterator - zwraca aktualnie pokazywany element.
    • *iterator = b - zapisuje wartość zmiennej b pod aktualnie pokazywany element.
    • iterator[i] - zwraca element znajdujący się o i pozycji dalej względem aktualnego elementu.
    • iterator[i] = b - zapisuje wartość zmiennej b jako element znajdujący się i pozycji dalej względem aktualnego elementu.
    • iterator + i - zwraca iterator przesunięty o i elementów dalej.
    • iterator += i - przesuwa iterator o i elementów dalej.
    • iterator - i - zwraca iterator przesunięty o i elementów bliżej.
    • iterator -= i - przesuwa iterator o i elementów wcześniej.
    • iterator++ - zwraca iterator pokazujący na i-ty element a następnie przesuwa iterator na i+1 element.
    • ++iterator - przesuwa iterator na i+1 element i zwraca iterator pokazujący na i+1 element.
    • iterator– - zwraca iterator pokazujący na i-ty element a następnie przesuwa iterator na i-1 element.
    • –iterator - przesuwa iterator na i-1 element i zwraca iterator pokazujący na i-1 element.
    • iterator1 == iterator2 - porównanie dwóch iteratorów - są sobie równe tylko wtedy gdy pokazują na ten sam element.
    • iterator1 != iterator2 - analogicznie jak powyżej.
  8. Wszystkie metody zwracające wartość elementu powinny wyrzucać wyjątek typu aghException jeżeli żądany element jest poza zakresem :!:
  9. Nie ma przymusu tworzenia metod czy też klas specjalizowanych.
  10. Zaistniałe nieprawidłowe sytuacje powinny zostać obsłużone poprzez wyrzucenie wyjątku przy pomocy klasy aghException.
  11. Program powinien się poprawnie kompilować i uruchomić wraz z dostarczonym plikiem ex5.zip
pl/dydaktyka/jimp2/2016/part2/ex/ex5.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0