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

Slides:



Advertisements
Liknende presentasjoner
XMLSchema.  Innledende eksempler: Tove 4. Janni 5. Huskelapp 6. Ikke glem avtalen til helgen 7. Vi har sett DTD’en til dette xml dok. Her kommer.
Advertisements

JAVASCRIPT I NETTLESEREN. Objekter i nettleseren Objekter som er innebygd i språket Egendefinerte objekter Nettleser objekter HTML objekter.
1 Kap 08 Kø. 2 Kø - Definisjon En kø (eng queue) er en lineær struktur hvor elementer kan innsetttes kun i den ene enden av listen, kalt bak, og fjernes.
Hvordan uttrykke krav Kapittel 4.4. Innledning Målet er å samles rundt ett entydig språk som ikke kan misforståes eller feiltolkes. Gjør sporbarheten.
Design Patterns Iterator & Mediator. Gruppe 8 Presentasjonsgruppe:Resten av gruppen: Marianne AtesAndrè Johansen Tom Vidar LundeHege-Kristin Johansen.
Teknikker for å bedre design- prosessen -Design by contract -Prototyping design -Fault-tree analyses.
std::basic_string En oversikt over C++ Standard bibliotekets streng-klasse.
INF 295 Algoritmer og datastrukturer Forelesning 7 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
INF 295 forelesning 14 - kap 8 Disjunkt mengde ADT Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 9a Søketrær Hans Fr. Nordhaug (Ola Bø)
INF 295 Algoritmer og datastrukturer Forelesning 6 ADT Lister, Stakker og Køer Hans Fr. Nordhaug (Ola Bø)
1 Arrayer og form(ularer) (Kapittel 4). 2 Mål  Forstå assosiative og superglobale arrays  Kunne behandle webformularer (forms)  Kjenne forskjellen.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringContainerklasser.2 Mange objekter.
Kapittel 12 Samlingar Samlingar og datastrukturar Ei samling (collection) blir brukt til å oppbevare og handtere andre objekt ArrayList – klassen.
Iterator i Java boolean hasNext() E next() void remove()
DILEMMA, DRIVKREFTER OG BARRIERER
Geometri 1.
Forelesning 9 Are Raklev.
Arbeidsgiver skal utføre risikovurdering.
Nye Bildrivstoff Rotary Skien Nye Bildrivstoff Rotary Skien
Tallsystemer.
Retorikk.
(oraciones condcionales)
Lokal organisering STUDIELEDERE
Presentasjon NIFs lov- og organisasjonsseminar
Hvilke spørsmål har dere etter å sett denne rullen?
SAB Arbeidsgruppe 4 – organisasjons- og beslutningsstruktur
Informasjonsmøte
Lecture 10.
Østensjøvannet. Det virkelig levende vassdraget.
Fagkonferansen om karriereveiledning 3.og4.mai 2017.
- Ladningenes rundreise
Are Raklev Teoretisk fysikk, rom FØ456,
Krefter og trafikk Gjere reie for omgrepa fart og akselerasjon
Are Raklev Teoretisk fysikk, rom FØ456,
Are Raklev Teoretisk fysikk, rom FØ456,
Are Raklev Teoretisk fysikk, rom FØ456,
NORDSTRAND IDRETTSFORENING
Forelesning 10 Are Raklev.
Forelesning 27 Are Raklev.
Orientering for Komité for teknikk, kultur og fritid 4. mai 2017
Litt historikk.
Utdanningsavdelingen Inntak og fagopplæring
Brevet til menigheten i Smyrna, Åp 2:8-11
Hvorfor ikke satse på helse? Hva vet vi, og hva kan vi gjøre?
Velkommen til foreldremøte
Stiklestad 28. September 2017 DELAKTIGHET – PÅ EGNE PREMISSER!
INNOVASJONSCAMP November 2016 i Oppdal Kulturhus
Lecture 9.
FYS2130 Svingninger og bølger
Are Raklev Teoretisk fysikk, rom FØ456,
Are Raklev Teoretisk fysikk, rom FØ456,
Group theory I dette kapitlet skal vi se på utvidelse av lister som vi behandlet generelt i kap 04. Vi skal nå benytte klassehierarkiet som vi utviklet.
Forelesning 15 Are Raklev.
Forelesning 12 Are Raklev.
Are Raklev Teoretisk fysikk, rom FØ456,
Forelesning 24.
2(x – 2y) – 2(x - y) = 5x – 3x(x – 2) – x(x+2) = Faktoriser 2x + 4=
Fraksjoneringsrespons
Are Raklev Teoretisk fysikk, rom FØ456,
Introduksjon til Partikkelfysikk
Ytre Nordfjord Turlag 2017.
Posisjoneringsprosessen
Sitat fra Sorgenfri av Jo Nesbø
Prosent Læringsmål Eksempler.
د. عائض بن عبدالله القرني
Sannsynlighetsregning I
Diagnostisk undervisning B – Samarbeid
Makroøkonomi for økonomer BI Trondheim Johannes Mauritzen K4.3 Steigum
Utskrift av presentasjonen:

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

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

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++ ) )

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

Funksjoner implementert i iteratorene

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

STL Container Organisasjonen

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)

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)

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

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

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

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;

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)

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.

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

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

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

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)

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

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)

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

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

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: mest oppdaterte working paper jeg kunne finne: 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