standardna biblioteka c++
TRANSCRIPT
-
7/25/2019 Standardna biblioteka C++
1/42
Objektno orijentisano
programiranje 1
Standardna biblioteka
-
7/25/2019 Standardna biblioteka C++
2/42
29.11.2011.Standardna biblioteka2
Standardna biblioteka ablona
Standard jezika C++ definie biblioteku ablona generikih funkcija i generikih klasa
Biblioteka se zove Standard Template Library (STL) Svrha je efikasno ostvarenje esto korienih
struktura podataka postupaka
koji ne zavise od tipova od kojih se struktura sastoji koji se obrauju u postupcima
Svi identifikatori u STL-u su u prostoru imena std
-
7/25/2019 Standardna biblioteka C++
3/42
29.11.2011.Standardna biblioteka3
Grupe ablona
Uslune funkcije i klase relacioni operatori, funkcijske klase
Jednostavne strukture podataka par, kompleksan broj
Zbirke podataka i iteratori vektor, red, lista, stek, mapa, skup, tekst, niz bitova
Algoritmi pretraivanje, ureivanje (sort), spajanje (merge)
-
7/25/2019 Standardna biblioteka C++
4/42
29.11.2011.Standardna biblioteka4
abloni relacionih operatora
Postoji 6 relacionih operatora: == != < > = 4 od 6 se mogu izraziti pomou 2: == i < (i logikih)
STL definie 4 izvedena operatora na osnovu 2
kao globalne generike funkcije Programeri treba samo da preklope == i =
-
7/25/2019 Standardna biblioteka C++
5/42
29.11.2011.Standardna biblioteka5
Primer ablona relacionih operatora
Pravougaonici se porede na osnovu povrinaclass Pravoug {
float a,b;
public:
Pravoug(float str_a=1, float str_b=1){a=str_a; b=str_b;}float P()const{return a*b;}
};
bool operator==(Pravoug x, Prvoug y) {return x.P()==y.P();}
bool operator
}
-
7/25/2019 Standardna biblioteka C++
6/42
29.11.2011.Standardna biblioteka6
Funkcijske klase/strukture
Funkcijska klasa (FK): klasa koja realizuje preklapanje operatorske funkcije operator()
Funkcijska struktura (FS) se realizuje na isti nain
abloni se u jeziku C++ ne mogu parametrizovati funkcijama Parametar ablona moe biti klasa/struktura, a to moe biti FK/FS FK/FS moe biti i generika (ablonska) klasa/struktura U STL-u neke generike klase i funkcije trae FK/FS kao argumente
FK/FS moe definisati korisnik, ali u STL-u postoji niz gotovih FS FS su definisane u zaglavlju postoje unarne i binarne aritmetike, relacione i logike operacije
-
7/25/2019 Standardna biblioteka C++
7/42
29.11.2011.Standardna biblioteka7
Opti oblici funkcijskih struktura
Unarna aritmetika operacijatemplate struct ime{
T operator()(const T&);}
Binarna aritmetika operacijatemplate struct ime{
T operator()(const T&, const T&);}
Unarna logika operacijatemplate struct ime{
bool operator()(const T&);}
Binarna logika ili relaciona operacijatemplate struct ime{
bool operator()(const T&, const T&);}
-
7/25/2019 Standardna biblioteka C++
8/42
29.11.2011.Standardna biblioteka8
Nazivi funkcijskih struktura
Unarna aritmetika operacija: negate
realizuju se pomou unarnog operatora -
Binarne aritmetike operacije: plus, minus, multiplies, divides, modulus realizuju se pomou: +, -, *, /, %
Relacijske operacije: equal_to, not_equal_to, greater, less, greater_equal, less_equal realizuju se pomou: ==, !=, >, =,
-
7/25/2019 Standardna biblioteka C++
9/42
29.11.2011.Standardna biblioteka9
Korienje funkcijskih struktura
Navedene generike FS mogu da se koriste za standardne proste tipove
za klasne tipove je neophodno preklopiti odgovarajue operatore
U navedenim generikim FS operatorska funkcija operator()se neposredno ugrauje u kod
ne gubi se na efikasnosti
esto se kao podrazumevana vrednost argumenta bibliotekih klasa
navodi neka od navedenih bibliotekih funkcijskih klasa
-
7/25/2019 Standardna biblioteka C++
10/42
29.11.2011.Standardna biblioteka10
Primer
Popunjavanje niza primenom operacije na elemente dva postojea niza#include
#include
using namespace std;
template
voidradi(const T a[], const T b[], T c[], int n){
Op op; for(int i =0; i>n; citaj(a,n); citaj(b,n);
radi(a,b,c,n); pisi(c,n);
radi(a,b,c,n); pisi(c,n);
}
-
7/25/2019 Standardna biblioteka C++
11/42
29.11.2011.Standardna biblioteka11
Parovi podataka
Par dva podatka proizvoljnih tipova Definicija u zaglavlju
template struct pair{
A first; B second;
pair():first(A()),second(B()){}
pair(const A&, const B&);
templatepair(const pair&);
}
templatebool operator@@(const pair&, const pair&);
template
pair make_pair(const A&, const B&);
-
7/25/2019 Standardna biblioteka C++
12/42
29.11.2011.Standardna biblioteka12
Korienje parova podataka
Tipovi A i B mogu biti prosti ili klasni, ali ne mogu biti nizovi Neophodno je da postoje konverzije A(C) i B(D) operator@@ moe biti jedan od 6 relacionih: ==, !=, =
(a,b)==(c,d) ako: a==c && b==d (a,b)
-
7/25/2019 Standardna biblioteka C++
13/42
29.11.2011.Standardna biblioteka13
Kompleksni brojevi
Za rad sa kompleksnim brojevima - generika klasa u biblioteci template class complex;
Potpune specijalizacije ablona za: float, double, long double Klasa podrava sve operacije kao sa bilo kojim numerikim tipom:
aritmetike: +, -, *, /, =, +=, -=, *=, /= i relacione: == i !=
Konstruktor: complex(const T& re=T(), const T& im=T()); Metode: T real()const; T imag()const; F-je: T real(const complex& z); T imag(const complex& z);
T abs(const complex& z); T arg(const complex& z);
T norm(const complex& z); //kvadrat potega
complex polar(const T& r, const T& fi);complex conj(const complex& z);
slino za: sqrt, exp, log, log10, sin, cos, tan, sinh, cosh, tanh za: pow(a,b)
ako je a complex, b {int, realan broj, complex} ako je a realno, bje tipa complex
-
7/25/2019 Standardna biblioteka C++
14/42
29.11.2011.Standardna biblioteka14
Zbirke podataka
Zbirke su objekti koji sadre podatke nekog tipa Drugi naziv: kolekcije Zbirke omoguavaju:
dodavanje novih elemenata,
dohvatanje postojeih elemenata izbacivanje nepotrebnih elemenata iz zbirke
Zbirke imaju razliite unutranje strukture koje utiu na: efikasnost (brzinu) pojedinih operacija nad zbirkom:
pristup elementu, dodavanje, izbacivanje
zauzee memorije Primeri:
vektori mali utroak memorije, brz pristup, sporo umetanje i izbacivanje liste vei utroak memorije, spor pristup, brzo umetanje i izbacivanje
-
7/25/2019 Standardna biblioteka C++
15/42
29.11.2011.Standardna biblioteka15
Vrste zbirki
Dve osnovne grupe zbirki sekvencijalneredosled elemenata korisnik odreuje neposredno
asocijativne na redosled elemenata korisnik moe da utie posredno(navoenjem neke strategije ureivanja elemenata)
Klase raznih zbirki imaju slian interfejs, ali su nezavisne nemaju zajednikog pretka
Za zbirke klasnih tipova,
od projektanta klase elemenata zbirke se oekuje da obezbedi: podrazumevani konstruktor, konstruktor kopije, destruktor, operator= za asocijativne zbirke i operator== i operator
=
== !=== !=== !=
++ -- + -
+= -=
++ --++++++
->->->->
[]*i*i*i=*i*i=
I(i) =I(i) =I(i) =I(i) =I(i) =
Proizvoljni2-smerni1-smerniUlazniIzlazni
-
7/25/2019 Standardna biblioteka C++
21/42
29.11.2011.Standardna biblioteka21
Tipovi iteratora
Tipovi iteratora su nezavisni od "vrste" iteratora Pod tipom se podrazumeva jeziki tip (klasa) Vrsta iteratora je odreena samom zbirkom,
a tip iteratora navodi programer kada ga deklarie Postoje sledei tipovi:
iterator direktni za promenljive zbirke
const_iterator direktni za nepromenljive zbirke reverse_iterator obrnuti za promenljive zbirke const_reverse_iterator obrnuti za nepromenljive zbirke
-
7/25/2019 Standardna biblioteka C++
22/42
29.11.2011.Standardna biblioteka22
Osobine tipova iteratora
Direktni: i+1 pokazuje na sledei element u odnosu na tekui
Obrnuti (reverzni): i+1 pokazuje na prethodni element u odnosu na tekui
Konstantni (za nepromenljive zbirke) preko njega se zbirka ne moe menjati ni umetanjem,
ni izbacivanjem, ni menjanjem vrednosti elemenata
-
7/25/2019 Standardna biblioteka C++
23/42
29.11.2011.Standardna biblioteka23
Tipovi zbirki
Vektori (vector) Redovi sa dva kraja (deque) Liste (list) Specijalne zbirke (queue, priority_queue, stack) Preslikavanja (map, multimap) Skupovi (set, multiset) Tekstovi (string) Nizovi bitova (vector, bitset)
-
7/25/2019 Standardna biblioteka C++
24/42
29.11.2011.Standardna biblioteka24
Vektori
Jednodimenzioni nizovi neogranienog kapaciteta Omoguavaju:
efikasan pristup elementima po proizvoljnom redosledu efikasno dodavanje na kraj i izbacivanje sa kraja neefikasno dodavanje i izbacivanje sa poetka i u sredini automatsku promenu kapaciteta
standard ne propisuje inkrement promene kapaciteta
Spadaju u sekvencijalne zbirke Koriste iteratore sa proizvoljnim pristupom
-
7/25/2019 Standardna biblioteka C++
25/42
29.11.2011.Standardna biblioteka25
Klasa vector
Deklaracija se nalazi u zaglavlju template class vector;
Eje tip elemenata vektora Klasa poseduje:
konstruktore podrazumevani (stvara prazan vektor) konstruktor kopijevector(unsignedvel, const E& x=E());
template vector(It prvi,It posl);kopira elemente neke zbirke iz intervala [prvi, posl)
destruktor operator=
metode (veliki broj)
-
7/25/2019 Standardna biblioteka C++
26/42
29.11.2011.Standardna biblioteka26
Metode klase vector (1)
voidassign(unsignedn, const E& x=E());
template voidassign (It prvi, It posl);
unsignedsize()const;
unsignedmax_size()const;bool empty()const;
voidresize(unsignedvel, const E& x=E());
unsignedcapacity()const;
voidreserve(unsignedn);
-
7/25/2019 Standardna biblioteka C++
27/42
29.11.2011.Standardna biblioteka27
Primer
#include
#include
using namespace std;
voidmain(){ vector v(1000);
cout
-
7/25/2019 Standardna biblioteka C++
28/42
29.11.2011.Standardna biblioteka28
Metode klase vector (2)
iterator begin();
const_iterator begin()const;
iterator end();
const_iterator end()const;reverse_iterator rbegin();
const_reverse_iterator rbegin()const;
reverse_iterator rend();
const_reverse_iterator rend()const;
-
7/25/2019 Standardna biblioteka C++
29/42
29.11.2011.Standardna biblioteka29
Primer
#include
#include
usage namespace std;
vector v(10);
typedef vector::iterator Vit;
typedef vector::reverse_iterator Vrit;for(Vit i=v.begin(); i!=v.end(); cin>>*i++);
for(Vrit i=v.rbegin(); i!=v.rend(); cout
-
7/25/2019 Standardna biblioteka C++
30/42
29.11.2011.Standardna biblioteka30
Metode klase vector (3)
E& operator[](unsignedind);
const E& operator[](unsignedind)const;
E& at(unsignedind); //0
-
7/25/2019 Standardna biblioteka C++
31/42
29.11.2011.Standardna biblioteka31
Metode klase vector (4)
iterator insert(iterator poz, const E& x=E());
voidinsert(iterator poz, unsignedn,
const E& x=E());
template voidinsert(iterator poz,
It prvi, It posl);
iterator erase(iterator poz);
iterator erase(iterator prvi, iterator posl);
voidclear();voidswap(vector & v);
-
7/25/2019 Standardna biblioteka C++
32/42
29.11.2011.Standardna biblioteka32
Globalna funkcija sa vector arg
Leksikografsko poreenje 2 vektora:bool operator@@(const vector&v1, const vector&v2);
// @@ {==,!=,=}
// v1==v2 ako imaju jednak broj elemenata// i ako su odgovarajui elementi e1==e2
// v1
-
7/25/2019 Standardna biblioteka C++
33/42
29.11.2011.Standardna biblioteka33
Primer
#include
#include
using namespace std;
voidmain(){
vector v; int k;
coutk, k!=9999){
if(v.size()==v.capacity()) v.reserve(v.size()+10);
// bez eksplicitne rezervacije dodaje se 1/2 kapac.
v.push_back(k);
}
v.reserve(v.size()); //ne mora imati efekat
int s=0; for(unsignedi=0; i
-
7/25/2019 Standardna biblioteka C++
34/42
29.11.2011.Standardna biblioteka34
Redovi sa dva kraja
Dinamiki nizovi koji pored mogunosti vektora omoguavaju i efikasno dodavanje elementa na i uklanjanje sa poetka niza
Definisani su u biblioteci template class deque;
Naziv potie od double-ended queue Spadaju u sekvencijalne zbirke, koriste iteratore sa proizvoljnim pristupom U odnosu na ablon vector, ne postoje samo metode:
capacity() i reserve() Postoje metode:
void push_front(const E& x);
void pop_front();
Pogodna struktura za realizaciju FIFO bafera
-
7/25/2019 Standardna biblioteka C++
35/42
29.11.2011.Standardna biblioteka35
Liste
Omoguavaju efikasno umetanje i izbacivanje elemenatai u unutranjosti zbirke
Efikasan sekvencijalni pristup
Neefikasan pristup po proizvoljnom redosledu U zaglavlju :template class list;
Spadaju u sekvencijalne zbirke i koriste dvosmerne iteratore
Iste funkcije kao za deque, sa izuzetkom operator[]() i at()
-
7/25/2019 Standardna biblioteka C++
36/42
29.11.2011.Standardna biblioteka36
Metode klase list
voidsplice(iterator poz, list& lst);
voidsplice(iterator poz, list& lst, iterator i);
voidsplice(iterator poz, list& lst,iterator prvi, iterator posl);
voidremove(const E& x);
templatevoidremove_if(U u);
voidunique();
template voidunique(U u);
voidmerge(list& lst);
template voidmerge(list& lst, U u);
void sort();
template voidsort(U u);
voidreverse();
-
7/25/2019 Standardna biblioteka C++
37/42
29.11.2011.Standardna biblioteka37
Red, prioritetni red i stek
Red, prioritetni red i stek su specijalne zbirke kod reda (queue) se podaci dodaju na kraj, a uzimaju sa poetka
kod prioritetnog reda (priority_queue) podaci se uzimajupo opadajuem prioritetu
kod steka (stack) se podaci dodaju na kraj (vrh) i uzimaju sa kraja Specijalne zbirke koriste ranije opisane zbirke U zaglavljima , odnosno :
template class queue;
template
class priority_queue;
template class stack;
-
7/25/2019 Standardna biblioteka C++
38/42
29.11.2011.Standardna biblioteka38
Preslikavanja
Elementi zbirki preslikavanja su parovi vrednosti (klju, podatak) Elementi su ureeni po vrednosti kljua
to omoguava brzo pronalaenje podatka na osnovu kljua
Preslikavanja spadaju u asocijativne zbirke
Preslikavanja koriste dvosmerne iteratore Preslikavanje kljua u podatak moe da bude:
jednoznano (jedinstvena vrednost kljua) zbirka map vieznano (vie podataka u zbirci za jednu vrednost kljua) multimap
U zaglavlju :template class map;
template class multimap;
-
7/25/2019 Standardna biblioteka C++
39/42
29.11.2011.Standardna biblioteka39
Skupovi
Brzo pronalaenje elemenata na osnovu njihovih vrednosti Preslikavanja koja kljueve preslikavaju u sebe
(elementi sadre samo klju, odnosno kljuje i podatak) Skupovi su ureeni elementi su ureeni po vrednostima Spadaju u asocijativne zbirke i koriste dvosmerne iteratore Slino preslikavanjima, skupovi mogu biti:
bez ponavljanja elemenata set sa moguim duplikatima elemenata multiset
U zaglavlu :template class set;
template class multiset;
-
7/25/2019 Standardna biblioteka C++
40/42
29.11.2011.Standardna biblioteka40
Tekstovi (stringovi)
Tekstovi se sastoje od niza znakova nekog tipa Za rad sa tekstovima promenljive duine ablon basic_string Klase u zaglavlju :
obratiti panju da su i razliite biblioteke
template class basic_string; Omoguava generisanje klasa za razne tipove znakova
(npr. za 8-bitne ASCII znake, za 16-bitne UNICODE znake) Vrlo esto se koriste char znaci u tekstovima, pa je definisan tip:
typedef basic_string string; //generisana klasa
Postoje sve metode klase vector izuzev push_back() i pop_back() Mnogo dodatnih metoda i operatora za rad sa tekstovima
assign(=), append(+=), +, , rel.ops., getline, compare,substr, copy, insert, replace, erase, find
-
7/25/2019 Standardna biblioteka C++
41/42
29.11.2011.Standardna biblioteka41
Nizovi bitova
Dve varijante: (1) vector i (2) bitset (1) specijalizacija ablona vector za elemente tipabool
dinamiki nizovi promenljivih duina sa efikasnim skladitenjem bitova bitovima se pristupa kao i bilo kojim drugim elementima vektora
primer:vector v(20);for(unsignedi=0; i>v[i++]);
for(vector::iterator i=v.begin(); i!=v.end(); cout,
-
7/25/2019 Standardna biblioteka C++
42/42
29.11.2011.Standardna biblioteka42
Algoritmi
STL podrava sledee kategorije algoritama: algoritmi nad pojedinanim podacima (min, max, swap)
obrada pojedinanih elemenata zbirki (for_each, fill, generate,...)
pretraivanje zbirki (find, min/max_element, count, search,...)
obrade zbirki: kopiranje (copy, copy_backward) zamena (replace, replace_if,...) uklanjanje (remove, remove_if, remove_copy,..., unique,...)
obrtanje (reverse, reverse_copy) poreenje (equal, lexicographical_compare) permutacije (next_permutation, prev_permutation)
obrade ureenih sekvencijalnih zbirki (sort, merge, binary_search)