Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Kolekcje i algorytmy ====== ===== STL - Standard Template Library ===== * [[http://www.sgi.com/tech/stl/|Standard Template Library Programmer's Guide]] * [[http://www.cplusplus.com/reference/stl/|STL Containers]] * [[http://www.cplusplus.com/reference/algorithm/|STL Algorithms]] ==== Przykład: vector i losowanie lotto ==== <code C++> #include <cstdlib> #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> w; vector<int>::iterator it; for(int i=1;i<=49;i++) w.push_back(i); cout << "Zawartosc wektora\n"; for(it=w.begin();it!=w.end();it++) cout << *it << " "; cout << endl; cout << "Size=" << w.size() << " Capacity=" << w.capacity() << endl; srand(time(NULL)); cout << "Random shuffle (numery lotto)\n"; random_shuffle(w.begin(),w.end()); for(it=w.begin();it!=w.begin()+6;it++) cout << *it << " "; cout << endl; } </code> ====== Ćwiczenia ====== ===== Klasa Wyraz ===== Zaimplementuj klasę ''**Wyraz**'' służącą do obsługi łańcuchów znaków składających się wyłącznie z liter. \\ Klasa ''**Wyraz**'': * wykorzystuje kolekcję **[[http://www.cplusplus.com/reference/vector/vector/|vector]]** do przechowywania liter (ewentualnie, prostsza wersja może wykorzystywać tablicę znaków lub obiekt ''string'') * przeciąża operator << wrzucający przechowywany wyraz do strumienia wyjściowego ''ostream'' * przeciąża operator >> czytający dokładnie jeden wyraz ze strumienia wejściowego ''istream''. Pamiętaj, że wyrazy w strumieniu mogą być oddzielone od siebie dowolną ilością znaków nie będących literami. Przy wczytywaniu napisu należy zignorować wszystkie początkowe znaki aż do momentu pojawienia się litery zaczynającej wyraz. Jeśli nastąpił błąd odczytu lub w strumieniu nie znalazły się litery wówczas tworzony jest wyraz pusty. * przeciąża operator < porównujący dwa wyrazy. Przy porównywaniu małe i duże litery traktujemy równoważne, wiec wyraz "Ala", "ala" i "ALA" są identyczne. * konstruktor domyślny tworzy pusty wyraz * konstruktor kopiujący Przykład działania: <code c++> std::stringstream ss; // z biblioteki <sstream> ss << "!@&#&*(Ala_ma++kota" << endl; Wyraz w; while(!ss.eof()) { ss >> w; cout << w << endl; } </code> Wynik działania: Ala ma kota Przydatne funkcje: * z biblioteki ''<cctype>'' : * ''[[http://www.cplusplus.com/reference/cctype/isalpha/|isapha]]'' * ''[[http://www.cplusplus.com/reference/cctype/tolower/|tolower]]'' * ''[[http://www.cplusplus.com/reference/cctype/toupper/|toupper]]'' * z biblioteki ''<iostream>'' : * ''[[http://www.cplusplus.com/reference/istream/istream/get/|get(char z)]]'' * ''[[http://www.cplusplus.com/reference/istream/istream/put|put(char z)]]'' * ''[[http://www.cplusplus.com/reference/istream/istream/eof|eof()]]'' ===== Słownik (kolekcja Map) ===== Wykorzystaj kolekcję **[[http://www.cplusplus.com/reference/map/map/|Map]]** oraz klasę **Wyraz** do stworzenia słownika zgodnie z treścią [[zajecia1#Słownik|zadania z pierwszych zajęć]]. ===== Algorytmy STL - dodatkowe ćwiczenia ===== [[http://www.cplusplus.com/reference/algorithm/|Algorytmy STL]]\\ Przetestuj działanie algorytmów **sort()**, **reverse()**, **fill()**, **rotate()**, **replace()**, **random_shuffle**, **min_element()** na kolekcji **[[http://www.cplusplus.com/reference/vector/vector/|vector]]**. - utwórz wektor i wypełnij go liczbami całkowitymi od 1 do 100 - wymieszaj zawartość całego wektora za pomocą algorytmu **random_shuffle** i wyświetl rezultat - posortuj elementy wektora i wyświetl rezultat - odwróć kolejność pierwszej połowy elementów wektora - wypełnij 20 ostatnich wartości zawartych w wektorze wartością -1 za pomocą algorytmu ''**fill**'' - przesuń cyklicznie wszystkie elementy wektora o jedną pozycję w tył tak aby drugi element był pierwszym, trzeci drugim itd. - znajdź najmniejszy element - znajdź liczbę wszystkich liczb parzystych w wektorze za pomocą algorytmu ''**count_if**''. Warunek do sprawdzenia przekaż jako wskaźnik do odpowiedniej funkcji. - zamień wszystkie elementy wektora mniejsze od 50 na wartość 0 za pomocą algorytmu ''**replace_if**''. Warunek do sprawdzania przekaż za pomoca obiektu funkcyjnego (obiektu przeciążającego operator()).