5.8. Zbiory 161
sl=sł-'C';
cout « "Zbiór SI - 'C' = "; sl .pisz () ;
cout << "Zbiór S2 ="; s2.pisz();
si.dodaj(s2;;
cout « "Zbiór Sl + S2 =
sl.pisz();
}
Uruchomienie programu powinno spowodować wyświetlenie na ekranie następujących komunikatów:
Zbiór Si = (A B C)
Zbiór Sl - 'C = (A B}
Zbiór S2 = iB E F)
Zbiór Sl + S2 = (A B E F)
Czytelnik z łatwością uzupełni samodzielnie operacje, dostępne w powyższej implementacji klasy Zbiór o przecinanie (iloczyn) i odejmowanie zbiorów.
Możliwe jest stworzenie dowolnej w zasadzie implementacji zbiorów, tj. akceptujących zmienną liczbę danych (wymaga dynamicznego przydziału pamięci, np. przy pomocy list) jak również akceptujących złożone elementy składowe, np. struktury. Wydaje się jednak, że zaprojektowanie klasy Zbiór z użyciem klas szablonowych (patrz §5.2.1) i list, byłoby „nadużyciem siły”, w przypadku, jeśli jedynymi potrzebnymi nam elementami zbiorów miałyby zostać jedynie... znaki alfabetu!
Zastanów się, jak można w prosty sposób zmodyfikować model Uniwersalnej Struktury Słownikowej (patrz strona 154), aby możliwe było jej użycie jako słownika 2-języcznego, np. polsko-angielskiego. Oszacuj wzrost kosztu słownika (chodzi o ilość zużytej pamięci) dla następujących danych: 6,000 rekordów IJSS w pamięci zawierających 25.000 zapamiętanych słów.
Zestaw dość podobnych zadań. Napisz funkcje, które usuwają:
a) pierwszy element listy;
b) ostatni element listy;