STL%20-%20Standard%20Template%20Library%202%20(STL%20od%20zr - PowerPoint PPT Presentation

About This Presentation
Title:

STL%20-%20Standard%20Template%20Library%202%20(STL%20od%20zr

Description:

STL - Standard Template Library 2 (STL od r de , czyli specyfikacja biblioteki) Autor: B a ej Chodarcewicz rainbow.mimuw.edu.pl/~bc189380/STL/ – PowerPoint PPT presentation

Number of Views:84
Avg rating:3.0/5.0
Slides: 35
Provided by: now88
Category:

less

Transcript and Presenter's Notes

Title: STL%20-%20Standard%20Template%20Library%202%20(STL%20od%20zr


1
STL - Standard Template Library 2(STL od zródel,
czyli specyfikacja biblioteki)
  • Autor Blazej Chodarcewicz
  • rainbow.mimuw.edu.pl/bc189380/STL/

2
Standard C (STL)
  • Organizacja pracujaca nad standardem
    http//anubis.dkuug.dk/jtc1/sc22/wg21/
  • Wersja Draft 1996 r.
  • ISO-IEC 14882 Programming.Language.C (1998)
  • ISO/IEC 148822003

3
Jak to dziala?
4
Iteratory
  • Uogólnienie wstazników
  • Umozliwiaja prace z kontenerami w ujednolicony
    sposób
  • Biblioteka formalizuje interfejs, semantyke oraz
    zalozenia zlozonosciowe
  • Semantyka iteratorów jest uogólnieniem semantyki
    wskazników
  • Wyrazenie i wartoscia jest obiekt pewnej
    klasy, enumeracja lub typ wbudowany T, zwany
    value type of iterator
  • Wszystkie iteratory i, dla których (i).m jest
    zdefiniowane, wspieraja takze wyrazenie i-gtm
  • Dla kazdego iteratora typu X, dla którego
    zdefiniowana jest równosc, jest dostepny typ
    difference type iteratora

5
Rodzaje iteratorów
  • input iterators
  • output iterators
  • forward iterators
  • bidirectional iterators
  • random access iterators

6
Relacje pomiedzy iteratorami
Input
Output
Forward
Bidirectional
Random Access
7
Iteratory zmienialne i niezmienialne
  • mutable, constant iterators
  • i jako referencja lub referencja do stalej
  • Iteratory stale nie spelniaja wymagan output
    iterators

8
past-the-end value
  • Dla kazdego iteratora istnieje wartosc wskazujaca
    na element za ostatnim elementem kolekcji, z
    która zwiazany jest iterator
  • dereferencable values
  • Biblioteka nigdy nie zaklada, ze past-the-end
    value jest dereferencable

9
Kilka definicji
  • Iterator i jest reachable z iteratora i wtw., gdy
    istnieje skonczona sekwencja aplikacji wyrazenia
    i, po której mamy i j.
  • Jesli i jest reachable z j, to i i j odnosza sie
    do tej samej kolekcji
  • Range para iteratorów, które okreslaja poczatek
    i koniec obliczen
  • Range i, i) empty range
  • W ogólnosci range i, j) odnosi sie do elementów
    struktury danych zaczynajacych sie od elementu
    wskazywanego przez i, konczacych sie na elemencie
    wskazywanym przez j bez tego elementu
  • Range i, j) jest prawidlowe wtw., gdy j jest
    reachable z i. Aplikacja algorytmu dla
    nieprawidlowego Range jest nieokreslona

10
Kilka zalozen
  • Zlozonosc (zamortyzowana) wszystkich operacji
    wymaganych dla danej kategorii iteratora jest
    stala
  • Na nastepnych slajdach wystepuja
  • a, b oznaczaja wartosci iteratora X, n oznacza
    wartosc typu difference type Distance u, tmp i m
    oznaczaja identyfikatory, r oznacza wartosc X, t
    oznacza wartosc typu wartosci iteratora - T.

11
Input iterator - wymagania
Operacja Typ Semantyka, zalozenia
X u(a) X post u jest kopia a Destruktor musi byc zdefiniowany i dostepny.
u a X wynik u post u jest kopia a
a b convertible to bool jest relacja równosci (w matematycznym sensie) zdefiniowana na dziedzinie wartosci iteratora
a ! b convertible to bool bool(ab) ! bool(a!b) dla dziedziny
a T pre a jest dereferenceable Jesli ab i (a,b) nalezy do dziedziny relacji , wtedy a jest takie samo jak b.
a-gtm pre (a).m jest dobrze zdefiniowane Semantyka jest taka sama jak (a).m
12
Input iterator wymagania c.d.
Operacja Typ Semantyka, zalozenia
r X pre r jest dereferenceable post r jest dereferenceable lub r jest wartoscia past-the-end post kazda kopia poprzednij wartosci r nie musi juz byc ani dereferenceable, ani nawet nie musi byc w dziedzinie
(void)r taka sama jak (void)r
r T T tmp r r return tmp
13
Input iterator uwagi
  • a b nie implikuje a b
  • Algorytmy nigdy nie powinny próbowac przechodzi
    po tym samym iteratorze dwa razy
  • Typ wartosci T nie musi byc typem lvalue
    (Przyklad istream_iterator)

14
Output iterator - wymagania
Operacja Zwracany typ Semantyka, zalozenia
X(a) X a t jest takie samo jak X(a) t Zaklada sie obecnosc destruktora
X u(a) SGI pre a musi byc zainicjalizowane post a t jest takie samo jak u t
X u a SGI pre a musi byc zainicjalizowane post a t jest takie samo jak u t
a t nieuzywany SGI pre a jest dereferencable po poprzednim przypisaniu bylo wykonane zwiekszenie a
r X r r
r konwertowalny do const X X tmp r const X r return tmp
r t nieuzywany
15
Output iterator - uwagi
  • operator moze zostac uzyty jedynie po lewej
    stronie wyrazenia przypisania
  • przypisanie poprzez wartosc iteratora odbywa sie
    tylko raz
  • nigdy nie nalezy przechodzic po tych samych
    wartosciach iteratora wiecej niz raz
  • i ! moga byc niezdefiniowane

16
Forward iterator - wymagania
Operacja Typ Semantyka, zalozenia
X u u moze byc niezainicjowane, zakladane jest istnienie destruktora
X u(a) X u a X równowazne X u u a post u a
X(a) X X(a) a
a b convertible to bool jest relacja równosci (w matematycznym sensie) zdefiniowana na dziedzinie wartosci iteratora
a ! b convertible to bool !(ab)
r a X post r a
17
Forward iterator wymagania c.d.
Operacja Typ Semantyka, zalozenia
a T pre a jest dereferenceable Jesli a b, to a b Jesli X jest typem mutowalnym, to a t jest poprawne
a-gtm pre (a).m jest dobrze zdefiniowane Semantyka jest taka sama jak (a).m
r X pre r jest dereferenceable post r jest dereferenceable lub r jest wartoscia past-the-end Jesli r s i r jest dereferencable, to r s. r r
r konwertowalny do const X X tmp r r return tmp
r T
18
Bidirectional iterator dodatkowe wymagania
Operacja Typ Semantyka, zalozenia
--r X pre istnieje s takie, ze r s. post r jest dereferenceable. Jesli r --s, to r s. r --r. --(r) r.
r-- konwertowalny do const X X tmp r --r return tmp
r-- konwertowalny do T
19
Random access iterator - wymagania
Operacja Typ Semantyka, zalozenia
r n X Distance m n if (m gt 0) while (m--) r else while (m) --r return r
a n n a X X tmp a return tmp n zalozenie a n n a
r - n X return r -n
a n X X tmp a return tmp - n
b a Distance pre Istnieje wartosc n typu Distance taka, ze a n b. b a (b a). (a lt b) ? distance(a, b) -distance(b, a).
20
Random access iterator wymagania c.d.
Operacja Typ Semantyka, zalozenia
an konwertowalny do T (a n)
a lt b konwertowalny do bool true wtw., gdy b a gt 0. gt jest relacja porzadku liniowego.
a gt b konwertowalny do bool równowazne z b lt a. gt jest relacja porzadku liniowego
a lt b konwertowalny do bool takie samo jak !(a gt b)
a gt b konwertowalny do bool takie samo jak !(a lt b)
21
Przyklady
int main() int array 1000, i int n 0
i array while (cin gtgt i) i i sort
(array, i) for (j array i ! j j) cout
ltlt j ltlt "\n"
22
Przyklad
int main () vectorltintgt v int input
while (cin gtgt input) v.push_back
(input) sort(v.begin(), v.end()) for
(vectorltintgtiterator i v.begin() i !
v.end() i) cout ltlt i ltlt "\n"
23
Obiekty funkcyjne
  • Obiekty funkcyjne to obiekty, które maja
    zdefiniowany operator ()
  • Sa wazna czescia biblioteki STL, zapewniaja one
    efektywnosc
  • Wszedzie tam, gdzie szablony algorytmów oczekuja
    wskazników do funkcji, mozna stosowac obiekty
    funkcyjne
  • Uzywanie obiektów funkcyjnych razem z szablonami
    funkcji zwieksza sile wyrazu biblioteki, a takze
    zwieksza efektywnosc kodu

24
Obiekty funkcyjne przyklady
  • dodanie elementów dwóch wektorów (double) a, b do
    siebietransform(a.begin(), a.end(), b.begin(),
    a.begin(), plusltdoublegt())
  • zanegowanie wszystkich elementów
    atransform(a.begin(), a.end(), a.begin(),
    negateltdoublegt())

25
Obiekty funkcyjne
template ltclass Arg, class Resultgt struct
unary_function typedef Arg argument_type type
def Result result_type template ltclass Arg1,
class Arg2, class Resultgt struct binary_function
typedef Arg1 first_argument_type typedef
Arg2 second_argument_type typedef Result
result_type
26
Obiekty funkcyjne przyklady
  • template ltclass Tgt struct plus
    binary_functionltT,T,Tgt T operator()(const T
    x, const T y) const Obiekt funkcyjny
    obliczajacy x y.
  • template ltclass Tgt struct negate
    unary_functionltT,Tgt T operator()(const T x)
    const Obiekt funkcyjny obliczajacy x.

27
Obiekty funkcyjne przyklady
  • template ltclass Operationgt class binder1st
    public unary_functionltOperationsecond_argument_t
    ype, Operationresult_typegt protected
    Operation op Operationfirst_argument_type
    value public binder1st(const Operation x,
    const Operationfirst_argument_type y)
    result_type operator()(const argument_type x)
    const
  • Konstruktor inicjalizuje op na x, value na y
  • Operator () zwraca op(value, x)
  • template ltclass Operation, class Tgt
    binder1stltOperationgt bind1st(const Operation
    op, const T x)

28
EqualityComparable
  • Typ T jest EqualityComparable jesli ma
    zdefiniowany operator , którego wynik jest
    konwertowalny do bool oraz
  • jest relacja równosci spelniajaca zalozenia-
    Dla kazdego a a a- Jesli a b, to b a-
    Jesli a b i b c, to a c

29
Algorytmy Non-mutating
  • template ltclass InputIterator, class
    UnaryFunctiongt UnaryFunction for_each(InputIterat
    or first, InputIterator last, UnaryFunction
    f)Efekt Zaaplikowanie f do wyników
    dereferencii kolejnych wartosci iteratora w
    przedziale first, last), zaczynajac od first i
    kontynuujac az do last - 1. Wymagania f nie
    powinno wywolywac zadnych funkcji, które nie sa
    zadeklarowane jako stale dla wartosci iteratora.
    Zwraca f. Zlozonosc f jest wywolywana
    dokladnie last - first razy. Uwaga Jesli f
    zwraca jakas wartosc wynik jest ignorwany.
  • template ltclass InputIterator, class
    EqualityComparablegtiterator_traitsltInputIteratorgt
    difference_type count(InputIterator first,
    InputIterator last, const EqualityComparable
    value) Wymagania Typ T jest
    EqualityComparable.Efekt Zwraca liczbe
    iteratorów i z przedzialu first, last), dla
    których warunek i value.

30
Algorytmy Non-mutating
  • templateltclass InputIterator, class
    EqualityComparablegt InputIterator
    find(InputIterator first, InputIterator last,
    const EqualityComparable value)Wymagania Typ T
    is EqualityComparable.Wynik Pierwszy iterator i
    z przedzialu first, last), dla którego prawdziwy
    jest warunek i value. Jesli zaden iterator z
    tego przedzialu nie spelnia tego warunku zwracany
    jest last.
  • templateltclass InputIterator, class
    OutputIteratorgt OutputIterator
    copy(InputIterator first, InputIterator last,
    OutputIterator result) Efekt kopiuje elementy
    z przedzialu first, last) do result,
    result(last-first)) zaczynajac od first i
    kontynuujac az do last. Dla kazdej nieujemnej
    liczby n lt (last-first), wykonuje (resultn)
    (firstn). Wynik result (last - first).
    Wymagania result nie powinien byc z przedzialu
    first, last). Zlozonosc dokladnie last - first
    przypisan.

31
Przyklad
templateltclass Tgt struct print public
unary_functionltT, voidgt print(ostream out)
os(out), count(0) void operator() (T x) os
ltlt x ltlt ' ' count ostream os int
count int main() int A 1, 4, 2, 8,
5, 7 const int N sizeof(A) / sizeof(int)
printltintgt P for_each(A, A N,
printltintgt(cout)) cout ltlt endl ltlt P.count ltlt "
objects printed." ltlt endl
32
Gdzie szukac informacji?
  • Musser Saini, STL Tutorial and Reference
  • Lippman, "Istota jezyka C
  • N.M.Josuttis, C bibliotek standardowa
    podrecznik programisty
  • www-d0.fnal.gov/dladams/cxx_standard.pdf
  • http//anubis.dkuug.dk/jtc1/sc22/open/n2356/

33
Gdzie szukac informacji?
  • http//www.sgi.com/tech/stl/ - implementacja STL
    firmy Silicon Graphics, Inc. (SGI)
  • http//www.informatik.hs-bremen.de/brey/stlbe.htm
    l - ksiazka "Designing Components with the C
    STL"
  • http//www.xraylith.wisc.edu/khan/software/stl/ST
    L.newbie.html - strona o STL z 1995 roku
  • http//www.cs.brown.edu/people/jak/proglang/cpp/st
    ltut/tut.html - prosty tutorial
  • http//www.cs.rpi.edu/wiseb/xrds/ovp2-3b.html -
    krótki opis STL'a
  • http//pages.cpsc.ucalgary.ca/kremer/STL/1024x768
    /index.html - strona o STL'u

34
  • Dziekuje za uwage!
Write a Comment
User Comments (0)
About PowerShow.com