Kolekcje i algorytmy

STL - Standard Template Library

Standard Template Library Programmer's Guide

STL Containers

STL Algorithms

Przykład: vector i losowanie lotto

#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; }

Ć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ę 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:

std::stringstream ss; // z biblioteki <sstream> ss << "!@&#&*(Ala_ma++kota" << endl; Wyraz w; while(!ss.eof()) { ss >> w; cout << w << endl; }

Wynik działania:

Ala
ma
kota

Przydatne funkcje:

z biblioteki <cctype> :

isapha

tolower

toupper

z biblioteki <iostream> :

get(char z)

put(char z)

eof()

Słownik (kolekcja Map)

Wykorzystaj kolekcję Map oraz klasę Wyraz do stworzenia słownika zgodnie z treścią zadania z pierwszych zajęć.

Algorytmy STL - dodatkowe ćwiczenia

Algorytmy STL

Przetestuj działanie algorytmów sort(), reverse(), fill(), rotate(), replace(), random_shuffle, min_element() na kolekcji 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()).