Intro till standardbiblioteket. Eric Elfving

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

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

Standard Template Library STL. Behållarklasser

TDP004. Minne och pekare. Eric Elfving Institutionen för datavetenskap

TDIU01 - Programmering i C++, grundkurs

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

Innehåll. Klasserna vector och deque

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

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

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

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

Objektorienterad programmering

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

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

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

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

ADT Set, Map, Dictionary. Iteratorer TDDD86: DALGP. Tommy Färnqvist, IDA, Linköpings universitet

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

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

Sammansatta datatyper Generics: Parametrisk polymorfism

Tentamen *:85/2I4123 C

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

TDIU01 - Programmering i C++, grundkurs

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 14 Innehåll

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

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

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 2. Länkad lista och iterator

Tommy Färnqvist, IDA, Linköpings universitet

Objektorienterad Programkonstruktion

Föreläsning 2. Länkad lista och iterator

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

Introduktion till algoritmer - Lektion 3 Matematikgymnasiet, Läsåret Lektion 3

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

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

Föreläsning 4 Innehåll

Samlingar Collection classes

TDIU01 - Programmering i C++, grundkurs

s.replace(k,n,s2,k2,n2) ersätter n tecken i s med början längden n kopierar från k2 i s2

Datastrukturer. föreläsning 3. Stacks 1

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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

TDIU01 - Programmering i C++, grundkurs

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Föreläsning 11. ADT:er och datastrukturer

maxlist-1. Indexerad lista Länkad lista

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

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

Länkade strukturer. (del 2)

Strömmar. Iteratorer. Funktionsobjekt. TDIU04 Programmering i C++, standardbibliotek. Containrar Iteratorer Algoritmer Funktionsobjekt

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

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

Maskinorienterad programmering, IT2

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Föreläsning 3 Datastrukturer (DAT037)

TDIU01 - Programmering i C++, grundkurs

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Stackar, köer, iteratorer och paket

Outline. Objektorienterad Programmering (TDDC77) Lösningen heter Collection. Collection gränsnittet. Collection. Iterable. Ahmed Rezine.

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

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

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

Länkade strukturer, parametriserade typer och undantag

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

Symboliska konstanter const

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

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

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

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Föreläsning 2 Innehåll

Datastrukturer och algoritmer

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

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

Datastrukturer och algoritmer

Tentamen Datastrukturer (DAT037)

Lösningsförslag till tentamen TDP004 Objektorienterad Programmering Teoretisk del

Sammansatta datatyper Generics: Parametrisk polymorfism

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

TDDC76 - Programmering och Datastrukturer

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

TDDC76 - Programmering och Datastrukturer

TDDC76 - Programmering och Datastrukturer

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 10 Innehåll

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Transkript:

Intro till standardbiblioteket Eric Elfving

1 Behållare (containers) 2 Iteratorer 3 Algoritmer

15 mars 2018 2 / 13 Bibliotekets behållare delas in i tre grupper: Sekevensbehålare (Sequence containers) Lagrar värden i en given sekvens. Kan vanligen använda index för att komma åt värden (dock ej garanterat). Sekvensadaptrar (Sequence adaptors) Anpassar gränssnittet för en given sekvensadapter. Associativa (Associative) Lagrar värden associerade till givna nycklar (istället för index).

15 mars 2018 3 / 13 Sekvensbehållare vector Lagrar värden kontinuerligt (i minnet). Kan ändra storlek vid behov (innebär ibland omallokering). array Fungerar som vector, men har en fast (vid kompilering) storlek. deque Double-ended queue, Bra när man ska lagra värden i börjar OCH i slutet. list Dubbellänkad lista. forward_list Enkellänkad lista.

15 mars 2018 4 / 13 Sekvensadaptrar stack Bygger ofta på deque, du kan endast komma åt det senast inlagda värdet. queue FIFO (First-In First-Out) kö. Du stoppar in värden i slutet och tar ut dem i början. priority_queue En kö som ordnar värden efter någon given prioritering.

15 mars 2018 5 / 13 Associativa map Kopplar ett värde till en nyckel av given typ. map<string, int> använder en string som nyckel för att komma åt ett värde av typ int. set Liknar map, men vi använder endast nyckeln (bra för att få unika värden). Finns även i multi- och unordered-varianter.

1 Behållare (containers) 2 Iteratorer 3 Algoritmer

15 mars 2018 7 / 13 En iterator är ett gemensamt gränssnitt för att referera till ett värde, ofta som ägs av en given behållare. Behållaren tillhandahåller en iterator specialiserad för att traversera just den datastrukturen behållaren består av. Gränssnittet ser ut som de inbyggda pekarna.

15 mars 2018 8 / 13 Det finns fem olika kategorier av iteratorer. Kategorin bestäms av behållaren och beror på den underliggande datastrukturen. Nedanstående tabell visar på vad som går att göra med respektive iterator. Kategori Operationer Input Output Forward Bidirectional Random Access ==,!= *, -> Läsa Skriva Läsa/Skriva Läsa/Skriva Läsa/Skriva ++ -- - - - +, +=, -, -= - - - - <, <=, >, >= - - - - i[n] - - - -

15 mars 2018 9 / 13 Om iteratorns kategori är bidirectional eller random access har vi även tillgång till reverse-iteratorer för att iterera genom behållaren baklänges. Figur : Förhållandet mellan iteratorn och dess reverse-variant cppreference

vector<int> values {1, 2, 3, 5, 8}; // explicitly declaring an iterator vector<int>::iterator it { values.begin() }; *it = 5; // change first element (1) to 5 // iterate over range using iterators for ( auto it { begin(values) }; it!= end(values); ++it ) { cout << *it << endl; } 15 mars 2018 10 / 13

1 Behållare (containers) 2 Iteratorer 3 Algoritmer

15 mars 2018 12 / 13 Standardbiblioteket har en stor samling av generella, effektiva lösningar av vanliga problem. Vi använder iteratorer för att bestämma intervall av värden att göra beräkningar på. Simple example: vector<int> vals {1, 2, 5, 2, 7}; sort(begin(vals), end(vals)); // vals is in order 1 2 2 5 7 Algoritmen bestämmer vilka iterator-kategorier som stöds. Vissa behållare har medlemsfunktioner som används istället för den generella algoritmen: list<int> lst {1, 45, 2, 5}; lst.sort();

15 mars 2018 13 / 13 Det inbyggda beteendet kan förändras med något som kan anropas som en funktion. bool comp(int a, int b) { return b < a; } vector<int> v {1, 2, 4, 2, 7}; Funktionspekare sort(begin(v), end(v), comp);

15 mars 2018 13 / 13 Det inbyggda beteendet kan förändras med något som kan anropas som en funktion. bool comp(int a, int b) { return b < a; } vector<int> v {1, 2, 4, 2, 7}; Funktionspekare sort(begin(v), end(v), comp); Funktionsobjekt (klasstyp som överlagrar funktionsanropsoperatorn) sort(begin(v), end(v), std::greater<int>{});

15 mars 2018 13 / 13 Det inbyggda beteendet kan förändras med något som kan anropas som en funktion. bool comp(int a, int b) { return b < a; } vector<int> v {1, 2, 4, 2, 7}; Funktionspekare sort(begin(v), end(v), comp); Funktionsobjekt (klasstyp som överlagrar funktionsanropsoperatorn) sort(begin(v), end(v), std::greater<int>{}); Lambdauttryck - temporärt anonymt funktionsobjekt sort(begin(v), end(v), [](int l, int r) { return r < l; });

Eric Elfving www.liu.se