150 likes | 259 Views
Seminář C++. 11. cvičení STL, Trolltech. Ing. Jan Mikulka. STL. Standard Template Library makra, globální proměnné, datové typy. Funkce podle hlavičkových souborů. < alghoritm > nabízí funkce sloužící k provádění operací na prvcích kontejnerů pomocí iterátorů < assert.h >
E N D
Seminář C++ 11. cvičení STL, Trolltech Ing. Jan Mikulka
STL • Standard Template Library • makra, globální proměnné, datové typy
Funkce podle hlavičkových souborů • <alghoritm> • nabízí funkce sloužící k provádění operací na prvcích kontejnerů pomocí iterátorů • <assert.h> • makro testující podmínku, není-li splněna, přeruší program • <complex> • funkce pro operace v komplexním oboru čísel • <ctype.h> • test znaků na písmena / čísla / malá / velká /...
Funkce podle hlavičkových souborů • <exception> • funkce, které slouží ke zpracování chyb • <functional> • funkční objekty (instance tříd) s přetíženým operátorem (), lze použít jako typ • <iomanip> • obsahuje manipulátory s parametrem sloužící k formátování vstupu a výstupu • <ios> • obsahuje manipulátory bez parametru pro formátování vstupu a výstupu a proudové třídy
Funkce podle hlavičkových souborů • <istream> • obsahuje proudovou třídu istream • <iterator> • obsahuje šablony iterátorů a funkce s iterátory • <locale.h> • funkce a makra určující národní prostředí • <locale> • přetížené funkce pro klasifikaci a konverzi znaků
Funkce podle hlavičkových souborů • <math.h> • matematické funkce • <memory> • alokace dočasné paměti, iterátory • <new> • dynamické přidělování paměti • <numeric> • numerické výpočty pomocí operátorů
Funkce podle hlavičkových souborů • <ostream> • obsahuje třídu ostream a několik manipulátorů • <setjmp.h> • makra a datové typy pro nelokální skoky • <signal.h> • funkce a konstanty pro zpracování signálů • <stdarg.h> • makra pro práci s funkcemi s proměnným počtem parametrů
Funkce podle hlavičkových souborů • <stdio.h> • funkce pro práci s proudy / datovými proudy • <stdlib.h> • alokace paměti, operace s programem, převody znaků • <string.h> • funkce pro práci s řetězci • <time.h> • funkce času, počet tiků od startu procesu
Funkce podle hlavičkových souborů • <valarray> • matematické funkce pro množiny prvků • <wchar.h>, <wctype.h> • nástroje pro práci s 16-bitovými znaky
STL - třídy • Kontejnery – implementují nejpoužívanější modely zpracování a ukládání dat – množiny, zásobníky. • Iterátory – slouží k jednoduchému přístupu k prvkům v kontejnerech • Proudové třídy – řízení datových proudů • Locale – přizpůsobení národním zvyklostem • Matematické třídy – valarray (paralelní výpočty), complex • Diagnostické třídy – umožňují identifikaci typu v době běhu programu (výhodné u ukazatelů a referencí, zpracování výjimek) • Další pomocné třídy – dynamická alokace paměti, ...
Příklad na třídu valarray #include <valarray.h> #include <iostream.h> using namespace std; void printarray(ostream &s, valarray<int> &array) { for (int i = 0; i < array.size(); i++) s << array[i] << " "; s<<endl; } int main(int argc, char* argv[]) { int ibuf1[10] = {0,1,2,3,4,5,6,7,8,9}; int ibuf2[10] = {0,1,2,3,4,5,6,7,8,9}; valarray<int> array1(ibuf1,10); valarray<int> array2(ibuf2,10); printarray(cout, array1); printarray(cout, array2); valarray<int> sum = array1 + array2; printarray(cout, sum); getchar(); return 0; }
Příklad na třídu queue int main(int argc, char* argv[]) { queue<int> Q; Q.push(8); Q.push(7); Q.push(6); Q.push(2); cout << "Pocet prvku ve fronte: " << Q.size() << endl; cout << "Vybiram element : " << Q.front() << " z fronty." << endl; Q.pop(); cout << "Pocet prvku ve fronte: " << Q.size() << endl; getchar(); return 0; }
Příklad na třídu string int main(int argc, char* argv[]) { string test; while(test.empty() || test.size() <= 5) { cout << "Type a string between 5 and 100 characters long. " << endl; cin >> test; } cout << "Changing the third character from " << test[2] << " to * " << endl; test[2] = '*'; cout << "now its: " << test << endl << endl; cout << "Identifying the middle: "; test.insert(test.size() / 2, "(the middle is here!)"); cout << test << endl << endl; cout << "I didn't like the word 'middle',so " "instead, I'll say:" << endl; test.replace(test.find("middle",0), 6, "center"); cout << test << endl; cin >> test; return 0; }
Příklad na třídu complex int main(int argc, char* argv[]) { complex<double> a(1.2, 3.4); complex<double> b(-9.8, -7.6); a += b; a /= sin(b) * cos(a); b *= log(a) + pow(b, a); cout << "a = " << a << ", b = " << b << endl; getchar(); return 0; }
Zadání cvičení • Napište program s využitím STL (valarray, complex, string a stream). V programu vygenerujte 2 pole po 10 komplexních číslech a ty pomocí valarray sečtěte. Napište funkci print, která bude jednotlivá pole vypisovat. Dodržte následující deklaraci: void print(ostream &os,valarray<cpx_double> array, string head) kde cpx_double je typ complex<double> • Za bonusový bod nahraďte funkci print přetíženým operátorem << • Výstupem programu bude: