Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter.

Liknende presentasjoner


Presentasjon om: "Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter."— Utskrift av presentasjonen:

1

2 Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter

3 Terminologien er mer kompleks enn C++ kan representere SGI sin oversikt introdusere ”Concepts” –Container concepts: Container, Forward Container, Reversible Container, Random Access Container Sequence: Front Insertion Sequence, Back Insertion Sequence, (+ Any Insertion Sequence) Associative Container: Sorted, Simple, Pair, Multiple, Multiple sorted, Unique sorted –Iterator Concepts: Trivial iterator, Output Iterator, Input Iterator, Forward Iterator, Bidirectional iterator, Random Access iterator –Function concepts: (Adaptable) Generator, Unary and Binary Functions Predicates (returnerer bool): Binary predicate, Adaptable Binary Predicate, StrictWeakOrdering (transitiv, anti-symmetrisk, komplett og anti-refleksiv) Monoid funksjon, Random Number Generetor

4 1. Iterators Ikke egentlig en språklig konstruksjon, men et konsept Generaliserte pekere Brukes til å gå gjennom en samling med objekter –K–Kan brukes om eksisterende typer, som arrays –B–Brukes om de nye typene i STL, som vector, list, osv. Eksempel: int p[] = { 1, 4, 2, 1, 5 }; for ( int* i = &p[0]; i != &p[5]; i++ ) doIt ( *i ); Bruker en vanlig peker som en iterator. (alternativt: f or ( int *i = p; i != p + 5; i++ ) )

5 Hvordan er en iterator definert? Man snakker om 5 typer iteratorerer: –InputIterator, OutputIterator er de med færrest operasjoner –ForwardIterator har både funsjonalitet til InputIterator og OutputIterator –BidirectionalIterator kan i tillegg til funksjonaliteten i ForwardIterator gå bakover –RandomAccessIterator kan i tillegg hoppe til en vilkårlig objekt i samlingen

6 Funksjoner implementert i iteratorene

7 2. Beholdere STL implementerer en rekke beholdere for objekter STL beholdere er basert rundt objekter, ikke pekere (!) Lett å tilpasse nye typer til beholder- tankegangen.

8 STL Container Organisasjonen

9 Generelt om samlingene Følgende funksjoner er felles –begin(), end() - returnerer iteratorer (har normal + const variant) –size(), max_size() –bool empty() Følgende typer er definert ved templates –Container::value_type, Container::pointer (trivielle) –Container::iterator, Container::const_iterator –Container::reference, Container::const_reference –Container::difference_type, Container::size_type (lite brukt)

10 Vanlige variasjoner Alle samlinger med tilhørende bidirectional iterators (Reversible Containers): –rbegin(), rend() Alle samlinger med tilhørende random access iterators (Random Access containers): –operator[] Innsettings- og slettingsoperatorer: –push_back, pop_back (back insertion container) –push_front, pop_front (front insertion containe) –insert, erase (sequence)

11 Vector Generalisering av C arrays, med mulighet for dynamisk arrayer. Sekvensiell samling. Oppfyller Reversible Container, (Front Insertion Sequence (dårlig)) og Back Insertion Sequence. Brukes til en array som kun skal vokse i den ene enden (eller ikke i det hele tatt). Er dem mest effektive samlingsklassen

12 Deque Utvidelse av funksjonaliteten til Vector med mulighet for utvidelse i begge ender. Sekvensiell samling Implementerer Front Insertion Sequence, Reversible Container, og Back Insertion Sequence. Brukes når man trenger å utvide samlingen i begge ender

13 List Modellert med en dobbelt linket liste (bruk slist for enkelt linket liste). Sekvensiell samling. Implementerer Reversible Container, Front Insertion Sequence, Back Insertion Sequence Implementere sin egen versjon av mange vanlige algoritmer for effektivitetshensyn. Brukes når man skal kunne putte inn elementer hvor som helst i listen

14 Set og multiset Assosiativ samling. Multiset er det samme som en ”bag”. Implementerer Unique/Multiple Sorted Associative Container, Simple Associative Container. Søkes i med find() Brukes når objektene skal traverseres i stigende/synkende rekkefølge. Medlemmene av settet skal implementere en sammenligningsfunksjon. Denne kan være operator<, eller gies som template parameter, som i: bool operator stringcompare(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; // sann dersom s1 < s2 } set stringset;

15 Map (og multimap) Assosiativ samling. Representere en funksjon (eller relasjon) i den matematiske betydningen. Implementerer Unique (eller Multiple) Sorted Associative Container og Pair Associative Container Søkes i med operator[] Brukes for å representere en samling objekter som skal indekseres på en verdi som ikke er en lav integer (for da bruker man vector)

16 Adaptors Brukes for å implementere en gitt funksjonalitet med et gitt samlingsobjekt. Type samlingsobjekt angis som template parameter, og kan være en hvilket som helst klasse som har implementert de rutinene som kreves. Stack (push, pop, top). Krever en Back Insertion Sequence (e.g. vector eller deque (default)) Queue (push, pop, top, front). Krever Back Insertion og Front Insertion Sequence Priority Queue (push, pop, top). Krever Random Access Container. Medlemmene i samlingen må være sammenlignbare.

17 3. Funksjonsobjekter Et funksjonsobjekt er et objekt av en klasse som implementerer ”operator()”. Kan brukes som argument til alle funksjoner som tar en funksjon som argument (f.eks ”for_each”) Et forsøk på å gjøre C++ mer lik Lisp? Predefinerte funksjoner i headeren : –unary_function, negate, logical_not –binary_function : plus, minus, multiplies, divides, modulus, equal_to, not_equal_to, greater, less, greater_equal, less_equal, logical_and, logical_or Adaptors –unary_negate binary_negate –binder1st, binder2nd

18 4. Algoritmer Finnes i headeren Implementert på samlinger, dvs. En rekke (range) av Iteratorer. Iteratorrekker er implementert med et par iteratorer ”first” og ”last” hvor last er første posisjon som ikke er medlem av rekken. En vanlig notasjon er ofte [first, last) Se på typen iterator for å se hva funksjonen gjør. E.g. en funksjon som tar InputIteratorer endrer ikke på verdier, men det gjør en som tar OutputIteratorer Mange Output funksjoner har en _n variant for å spesifisere rekken. Brukes ofte av lister. Mange funksjoner som sammenligner verdier har en _if variant for å spesifisere en alternativ søkestrategi

19 Non-mutating Algoritms: for_each, find, find_if, adjacent_find, adjacent_find_if, count, count_if, mismatch, miscmatch_if equal, equal_if, search, search_if

20 Mutating algoritms copy, copy_backward (brukes til å flytte elementer mot begynnelsen av en samling), swap_reanges, transform, transform (med operator) fill, fill_n, generate, generate_n replace, replace_if, replace_copy, replace_copy_if remove, remove_if, remove_copy, remove_copy_if unique, unique(_if), unique_copy, unique_copy(_if)

21 Reordering algorithms (min deling) random_shuffle, random_shuffle (med random number generator), partition, stable_partition reverse, reverse_copy, rotate, rotate_copy next_permutation, prev_permutation

22 Sorting algorithms sort (bruk member funksjon for list), sort (med funksjon), stable_sort, stable_sort (med funksjon), partial_sort, partial_sort (med funksjon), partial_sort_copy, partial_sort_copy med funksjon, nth_element, nth_element (med funksjon) binary_search, binary_search (med funksjon), lower_bound, lower_bound (med funksjon), upper_bound, upper_bound (med funksjon), equal_range, equal_range (med funksjon) merge, merge (med funksjon), inplace_merge, inplace_merge (med funksjon)

23 Sorting algorithms (2) Set funksjoner: includes, set_union, set_intersection, set_difference, set_symetric_difference Heap funksjoner: push_heap., pop_heap, make_heap, sort_hap min_element, max_element (med funksjon) lexicograpical_compare

24 Computational algoritms (#include ) accumulate, inner_product, partial_sum, adjacent_difference

25 5. Ytterligere informasjon Bøker hos accept: ”STL for C++ programmers” (snakk med Johannes), ”The C++ Programming Language, 3rd Edition” (snakk med Erik) Tutorials på nettet: http://www.cs.brown.edu/people/jak/proglang/cpp/stltut/tut.htm mest oppdaterte working paper jeg kunne finne: http://www.cygnus.com/misc/wp/dec96pub/ Quick reference på nettet (PostScript): ftp://ftp.blueneptune.com/pub/users/yotam/stlqr11 5.zip ftp://ftp.blueneptune.com/pub/users/yotam/stlqr11 5.zip


Laste ned ppt "Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter."

Liknende presentasjoner


Annonser fra Google