Algoritmbiblioteket (STL) Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer.



Relevanta dokument
Intro till standardbiblioteket. Eric Elfving

Programmering i C++ EDA623 Containerklasser och algoritmbibliotek. EDA623 (Föreläsning 10) HT / 33

Standard Template Library STL. Behållarklasser

Innehåll. Klasserna vector och deque

2D1387, Programsystemkonstruktion med C++ 01/02 1

Tentamen *:85/2I4123 C

Generell (template) programmering. Effektiv C++ Slutliga tips Genomgång av gammal tenta. Daniel Aarno Allt som fungerar som x ÄR x

Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner

Kapitel 4 - Mallar. Kapitel 4. Introduktion till mallar STL. 2D1387 Programsystemkonstruktion med C++ 1

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

Kapitel 4. Funktionsmallar. Mallar. Introduktion till mallar STL

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer

Användning av typeid. Operatorerna typeid och. Filen typeinfo.h måste inkluderas. typeid

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

7 Templates och Exceptions

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00

VARNING. Alternativ metod för att läsa XML filer XML - SAX. Ide till lösning. Inte parsa hela dokumentet på en gång

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 31 augusti 2005

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 14 Innehåll

Innehåll. Pekare. Datatyper Pekare, Arrayer och Referenser. Pekare Syntax. Pekare Syntax, operatorer. 4. Standard-containers. Pekare och arrayer

TDIU01 - Programmering i C++, grundkurs

Introduktion till arv

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

TDIU06 Programmering g.k. Laborationer LAB2. Vt1, Dessa laborationer ingår i examinationsmomentet LAB2 och ska göras i läsperiod Vt1.

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Innehåll. Datatyper Pekare, Arrayer och Referenser. Pekare. Pekare Syntax. Pekare Syntax, operatorerna * och & 5. Pekare och arrayer. Algoritmer.

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

4. Standard-containers. Strömmar och filer

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Innehåll. 1 Funktionsmallar. 2 Pekare och konstanter. 3 Typomvandlingar. struct Name { string s; //... };

5 Arv och dynamisk bindning FIGUR

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Innehåll. 1 volatile. 2 Kuriositeter. 3 Klasser och arv. 4 Råd och tumregler. 5 Mer om standard-containers. Trigraphs

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv

Länkade strukturer. (del 2)

Innehåll. 1 Typdeklarationer och typomvandling 2 Resurshantering. 3 Objektorientering, kort repetition. 4 Klasser

2D1387 Programsystemkonstruktion med C++ Laboration 1: Grundläggande C++ 2 september 2006

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Samlingar Collection classes

Länkade strukturer, parametriserade typer och undantag

Tentamen EDAF30 Programmering i C++

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Föreläsning 4 Innehåll

Innehåll. 1 Algoritmer. 2 Strömmar och filer. 3 Iteratorer. 1 Söka, räkna. 2 Jämföra, genomlöpa. 3 Generera nya data. 4 Kopiera och flytta element

maxlist-1. Indexerad lista Länkad lista

Tommy Färnqvist, IDA, Linköpings universitet

Övningsuppgifter. TDIU04 Programmering i C++, standardbibliotek. Innehåll. Vt Lektion Lektion Lektion Lektion 4...

Innehåll. Pekare Exempel

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Standard Template biblioteket, eller STL, är ett C++ bibliotek innehållande: STL tillhandahåller många grundläggande algoritmer och datastrukturer:

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Programsystemkonstruktion med C++

TDIU01 - Programmering i C++, grundkurs

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Innehåll. Pekare Exempel

Dynamisk bindning och polymorfism

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TDIU01 Programmering i C++

Tillämpad programmering

Tentamen EDAF30 Programmering i C++

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

Del6 Strömmar Ämnesområden denna föreläsning:

TDP004 - Datortenta (DAT2)

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

TDIU01 - Programmering i C++, grundkurs

Klasser. Det är egentligen nu som kursen i programmeringsteknik börjar..., s k objektorienterad programmering.

Algoritmer. Två gränssnitt

Polymorfi. Objektorienterad och komponentbaserad programmering

Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Föreläsning 5-7 Operatoröverlagring

DD2387 Programsystemkonstruktion med C++ Tentamen 1 Tisdagen den 28 oktober 2014, 08:00-12:00

Transkript:

Algoritmbiblioteket (STL) (f.d.) Standard Template Library Samlingstyper (containers) Algoritmer Funktionsobjekt Adaptrar Designstrategi Generiska algoritmer som fungerar på godtyckliga samlingsdatatyper, vilka har iteratorer Algoritm sort find copy vect list stack deque Samling(Datastruktur) Datatyp int char double[] Bil Person 223 224 forts designstrategi Effektiva algoritmer Använder enbart mallar i C++ Inga arvshierarkier eller virtuella funktioner Ej objekt-orienterat Bygger på forskning om generiska algoritmer av Stepanov/Lee/Musser -79-95 General Electric, AT&T Bell, HP Presenterades för ANSI/ISO C++ 93 Mycket gott mottagande 225 Sekvenser Samlingstyper vector<t>,deque<t>,list<t> Associativa set<t,c>, map<k,v,c>, multiset<t,c>, multimap<k,v,c> Adaptrar stack<t>, queue<t>, priority_queue<t,c> impl t.ex. som vector, deque, eller list Anm. C comparator. Funktionsobjekt för sortering 226 Iteratorer Pekare vector<int>::iterator it=vec.begin(); *it++ = 17; Intervallet är [begin,end) dvs begin ingår men ej end Vanliga pekare kan användas int arr[10]; copy(&arr[0], &arr[10], vec) eller copy(arr, arr+10, vec) OBS, utanför vektorn 227 Algoritmer Ca 70 st Opererar på intervall Oberoende av datastruktur Sekvensalgoritmer for_each, find, copy, transform, replace Sortering sort, stable_sort, binary_search, max_element Numeriska accumulate, inner_product 228 1

Funktionsobjekt Objekt med funktionsanropsoperator T::operator() Bättre än funktionspekare Bindning vid kompileringen Kan innehålla data Modern programmering set<int, less<int> > s; remove_if(first,last,not1(bind2nd(modulus<int>(),2))); ta bort alla jämna tal 229 Ett litet exempel void sort_file(char *name) ifstream file(name); istream_iterator<string,ptrdiff_t> in(file),eof; vector<string> strs; copy(in,eof,back_inserter(strs)); sort(strs.begin(),strs.end()); copy (strs.begin(),strs.end(), ostream_iterator<string>(cout, \n )); 230 Användning (forts exempel) int main(int argc, char *argv[]) for_each(argv+1,argv+argc,sort_file); return 0; 231 Vad är en iterator Pekarabstraktion Läsiterator för att avläsa värden Skriviterator enbart för tilldelning Enkel/dubbelriktad stegar i en/båda riktning/-arna läs&skriv Löper över en samling element, en i taget Ofta en-gångs objekt 232 Iteratorexempel list<int> lst(10); list<int>::iterator p=lst.begin(); while (p!= lst.end()) *p = 37; p++; Samlingstyper, vector<t> index från 0 range-check med.at() minneshantering&storlek automatiskt #include <vector> using namespace std; vector<int> vec(10); vec[0]=12; vec[1]=37; vec.push_back(1234); // vec[10] = 1234; reserv 233 234 2

Medlemsfunktioner list<t> Konstruktor vector(), vector(int size), vector(int size, T value) Aktuellt antal element vec.size(); vec.empty(); Kapacitet vec.capacity(); Indexering vec[i], vec.at(i), vec.front(), vec.back() Iterator vec.begin(), vec.end() 235 Dubbellänkad, dynamisk lista Insättning och uttag via iterator O(n) Access av ändarna O(1) Saknar indexering #include <list> list<int> lst; lst.push_front(123); lst.push_back(987); 236 deque<t> double-ended queue deck mellanting lista & vektor använder minnesblock Mängd set<t,comparator> Ordnad mängd set - unika element multiset - ev flera lika ofta impl som binära träd Comparator function object, anropar operator< #include <set> set<int, less<int> > s; s.insert(12); s.insert(34); Obs, mellanslag! set_union(s.begin(),s.end(),s2.begin(),s2.end(), inserter(sr,sr.begin())); 237 238 Utskriftsoperator för mängd #include <set> using namespace std; typedef set<double,less<double> > set_type; ostream& operator<<(ostream& out, const set_type& s) copy(s.begin(), s.end(), ostream_iterator<set_type::value_type>(out," ")); return out; map<key,t,comparator> Associativ, ordnad vektor map unika nycklar multimap flera lika nycklar #include <map> map<string, int, less<string> > dayinmonth; dayinmonth[ December ] = 31; 239 240 3

Krav på elementen T Defaultkonstruktor T::T() Kopieringskonstruktor T::T(const T& t) Tilldelningsoperator T& T::operator=(const T& t) Destruktor T::~T() Likhet x == y Ordning (för set/map) x<y Ortodox kanonisk klassform Algoritmer Generiska mha funktionsmallar Arbetar på intervall Fungerar även på standardtyper int a[5]; 241 242 Icke-destruktiva sekvensalgoritmer for_each applicerar en funktion på varje element find letar pos = find(lst.begin(),lst.end(), ord ); cout << *pos; find_if(inputiteratorbegin,inputiteratorend, UnaryPredicate) 243 Exempel på find_if bool div_by_ten(int n) return!(n%10); int main() vector<int> vec(100); vector<int>::iterator pos; pos = find_if(vec.begin(), vec.end(),div_by_ten); cout << *pos; return 0; 244 Fler algoritmer... count void count(inputiteratorbegin,inputiteratorend, Value, size& n) count_if equal / mismatch Ser om två samlingar är lika search letar efter delintervall Destruktiva sekvensalgoritmer copy remove tar bort element med viss egenskap replace fill generate fyller med generatorfunktion transform applicerar funktion på varje element 245 246 4

Sorteringsalgoritmer sort O(n log n) worst:o(n 2 ) binary_search min_element,max_element Mängdrelaterade alg includes set_union, set_intersection accumulate transform inner_product 247 248 Funktionsobjekt Generalisering av funktionspekare Objekt med funktionsanropsoperator T funcobj::operator()(const T&) class LinTrans public: LinTrans(double a, double b): A(a), B(b) double operator()(double x) return A*x+B; private: ; double A,B; Lintrans t(2.34,5.67); double y=t(0.45); 249 Funktionstyper i STL plus<t>, minus<t>, times<t>, divides<t>, modulus<t>, negate<t> equal<t>, less<t>, greater<t>, sort(v.begin(),v.end(),greater<string>()); //stig ordning logical_and<t>,.. 250 Argumentbindare Adaptrar Gör om binär funktion till unär genom att binda ett av argumenten bind1st, bind2nd vector <double> v; int mean = accumulate(v.begin(), v.end(), 0, plus<double>()) / v.size(); transform(v.begin(),v.end(), bind2nd(minus<double>(), mean)); Finns tre stycken stack, queue och priority_queue Implementerar inte själv den underliggande datastrukturen utan bygger på de andra containerklasserna. Man kan välja vilka av de grundläggande containerklasserna man vill använda som underliggande implementation 251 252 5