tddi82 - objektorienterad problemlösning - standardbiblioteket itddi82/lecture/slides/stl_i.pdf ·...

127
TDDI82 ‐ Objektorienterad problemlösning Standardbiblioteket I Christoffer Holm Instuonen för datavetenskap

Upload: others

Post on 27-Apr-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

TDDI82 ‐ ObjektorienteradproblemlösningStandardbiblioteket I

Christoffer Holm

Institutionen för datavetenskap

Page 2: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

1 Kursupplägg2 Behållare3 Iteratorer4 Smartpekare

Page 3: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

1 Kursupplägg2 Behållare3 Iteratorer4 Smartpekare

Page 4: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

3 / 51

KursuppläggPersonal

• Kursledare: Christoffer Holm

• Etiklärare: Erik Gustavsson

• Examinator: Klas Arvidsson

• Kursassistent: Eric Ekström

• Assistent: Isak Almquist

Page 5: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

4 / 51

KursuppläggMål

• C++: Standardbiblioteket

• C++: Mallar

• Projekt: Lösa och formulera problem medobjektorientering

• Projekt: Skapa objektorienterad design

• Etik: Redgöra och analysera etiska aspekter inomdatateknik

Page 6: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

5 / 51

KursuppläggKursmoment

• Labserie• Etikseminarier• Projekt• Tentamen

Page 7: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

5 / 51

KursuppläggKursmoment

• Labserie• 2 laborationer• ungefär 2 veckor• Möjlighet för bonus på tentan• Storseminarie ‐ obligatoriskt

• Etikseminarier• Projekt• Tentamen

Page 8: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

5 / 51

KursuppläggKursmoment

• Labserie• Etikseminarier• 2 “seminarier”• diskussionsuppgifter• Pass bokade i schemat är lärarfritt arbetspass• Erik Gustavsson ([email protected])

• Projekt• Tentamen

Page 9: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

5 / 51

KursuppläggKursmoment

• Labserie• Etikseminarier• Projekt• Objektorienterat projekt i C++• Oftast ett spel, men kan vara annat också• 4 personer per grupp• ungefär 3 veckor• Verktyg såsom git och make

• Tentamen

Page 10: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

5 / 51

KursuppläggKursmoment

• Labserie• Etikseminarier• Projekt• Tentamen• Zoom övervakad• 2 uppgiter: en mall‐uppgift och en STL‐uppgift• U, G eller VG per uppgift• 3 = två G, 4 = ett VG, 5 = två VG

Page 11: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

6 / 51

KursuppläggDeadlines

13/4 STL‐seminarie20/4 Etikseminarie 129/4 Hård deadline samtliga laborationer29/4, 17:00 Anmälan till projektgrupp i webreg3/5, 17:00 Inlämning projektbeskrivning10/5, 12:00 Inlämning individuell statusrapport11/5 Etiksemiarie 225/5 Redovisning projekt

Page 12: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

7 / 51

KursuppläggPlanering

• Denna kurs har högre tempo än TDIU20

• Planera er tid: utnyttja ingenjörsprofessionalismen

Page 13: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

8 / 51

KursuppläggLaborationer

• Listan

• Textredigering

Page 14: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

8 / 51

KursuppläggLaborationer

• Listan

• Mallar• Iteratorer• Smartpekare

• Textredigering

Page 15: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

8 / 51

KursuppläggLaborationer

• Listan

• Mallar• Iteratorer• Smartpekare

• Textredigering

• Lambda funktioner• STL Algoritmer• Databehållare

Page 16: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

9 / 51

KursuppläggLaborationer

• 12/4: Deadline för bonus, Listan

• 26/4: Deadline för bonus, Textredigering

• 29/4: Sista chansen för redovisning

Page 17: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

10 / 51

KursuppläggÄndringar

• Ny laboration: Textredigering

• Microsoft Teams från början för laborationer

• Bonus för tentan

Page 18: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

11 / 51

KursuppläggLaborationer

Registrera er i WebReg såsnart som möjligt!

Page 19: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

1 Kursupplägg2 Behållare3 Iteratorer4 Smartpekare

Page 20: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

13 / 51

BehållareIntroduktion

• Sekvensbehållare (Sequence containers)

• Sekvensadaptrar (Sequence adaptors)

• Associativa behållare (Associative containers)

Page 21: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

13 / 51

BehållareIntroduktion

• Sekvensbehållare (Sequence containers)

• Lagrar värden av samma typ i en given sekvens

• Vanligtvis används index för hämta värden

• Sekvensadaptrar (Sequence adaptors)

• Associativa behållare (Associative containers)

Page 22: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

13 / 51

BehållareIntroduktion

• Sekvensbehållare (Sequence containers)

• Sekvensadaptrar (Sequence adaptors)

• Anpassat gränssnittet för en given sekvensbehållare

• Representerar saker såsom stackar, köer, prioritetslistor, o.s.v.

• Associativa behållare (Associative containers)

Page 23: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

13 / 51

BehållareIntroduktion

• Sekvensbehållare (Sequence containers)

• Sekvensadaptrar (Sequence adaptors)

• Associativa behållare (Associative containers)

• Lagrar värden associerade till givna nycklar

• Värden måste vara av samma datatyp

• Nycklar måste vara av samma datatyp

• Använder nycklarna för att komma åt värden

Page 24: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

14 / 51

BehållareSekvensbehållare

• vector• Lagrar värden kontinuerligt i minnet• Ändrar storlek efter behov• Vanligaste behållaren

• array• deque• list• forward_list

Page 25: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

14 / 51

BehållareSekvensbehållare

• vector• array• Lagrar värden kontinuerligt i minnet• Har en fixerad storlek som är känd under

kompilering• Är effektivare än vector

• deque• list• forward_list

Page 26: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

14 / 51

BehållareSekvensbehållare

• vector• array• deque• Double‐ended queue• Lagrar inte värden kontinuerligt i minnet• Bra om man vill komma åt värden endast i början

OCH slutet• list• forward_list

Page 27: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

14 / 51

BehållareSekvensbehållare

• vector• array• deque• list• En dubbellänkad lista• Lagrar inte värden kontinuerligt i minnet• Bra om man vill komma åt värden i början• Kan stega bakåt och framåt i listan

• forward_list

Page 28: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

14 / 51

BehållareSekvensbehållare

• vector• array• deque• list• forward_list• En enkellänkad lista• Lagrar inte värden kontinuerligt i minnet• Bra om man vill komma åt värden i början• Kan endast stega framåt i listan

Page 29: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

15 / 51

BehållareSekvensbehållare

#include <vector>#include <array>#include <deque>#include <list>#include <forward_list>int main(){// likadant för list, forward_list och dequestd::vector<int> v {1, 2, 3};

// array måste även ange storlekstd::array<int, 3> a {1, 2, 3};

}

Page 30: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

• Bygger ofta på deque

• Kan endast komma åt det senaste inlagda värdet

Page 31: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

std::map<std::string, int> map{};

Page 32: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

map["c"] = 3;

Page 33: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"c" 3

map["c"] = 3;

Page 34: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"c" 3

map["a"] = 1;

Page 35: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"a" 1"c" 3

map["a"] = 1;

Page 36: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"a" 1"c" 3

map["d"] = 4;

Page 37: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"a" 1"c" 3"d" 4

map["d"] = 4;

Page 38: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"a" 1"c" 3"d" 4

map["b"] = 2;

Page 39: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

16 / 51

BehållareAssociativa behållare

"a" 1"b" 2"c" 3"d" 4

map["b"] = 2;

Page 40: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

17 / 51

BehållareAssociativa behållare

• map• set• multi*• unordered_*

Page 41: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

17 / 51

BehållareAssociativa behållare

• map• Kopplar ett värde till en nyckel• Kräver att nycklarna går att jämföra• Sorterad efter nycklarna• Varje nyckel kan endast förekomma en gång

• set• multi*• unordered_*

Page 42: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

17 / 51

BehållareAssociativa behållare

• map• set• Som mapmen har endast nycklar• Bra för att garantera att alla värden är unika och

sorterade• multi*• unordered_*

Page 43: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

17 / 51

BehållareAssociativa behållare

• map• set• multi*• Finns multimap och multiset• I dessa försvinner kravet att nycklarna är unika

• unordered_*

Page 44: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

17 / 51

BehållareAssociativa behållare

• map• set• multi*• unordered_*• I dessa försvinner kravet att nycklarna ska gå att

jämföra• Nycklarna är inte längre sorterade

Page 45: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

18 / 51

BehållareAssociativa behållare

#include <map>#include <set>#include <string>int main(){std::map<std::string, int> m { {"a", 1},

{"b", 2} };std::set<double> s { 1.0, 3.0, -1.0 };

}

Page 46: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

1 Kursupplägg2 Behållare3 Iteratorer4 Smartpekare

Page 47: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

20 / 51

IteratorerIteration

• Vi vill kunna loopa igenom våra behållare

• Vore trevligt om vi kan göra det generellt

• Problemet är att alla behållare har inte samma sätt attkomma åt element

• Därför måste vi tänka om för att kunna loopa igenombehållare på ett generellt sätt

Page 48: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

21 / 51

IteratorerIteration

int main(){vector<int> v {1, 2, 3};for (int i{0}; i < v.size(); ++i){cout << v[i] << endl;

}}

Page 49: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

21 / 51

IteratorerIteration

int main(){set<int> v {1, 2, 3};for (int i{0}; i < v.size(); ++i){cout << v[i] << endl; // fungerar ej

}}

Page 50: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

21 / 51

IteratorerIteration

int main(){vector<int> v {1, 2, 3};for (int e : v){cout << e << endl;

}}

Page 51: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

21 / 51

IteratorerIteration

int main(){set<int> v {1, 2, 3};for (int e : v){cout << e << endl; // fungerar

}}

Page 52: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

22 / 51

IteratorerRange‐baserad for‐loop

• Man kan skapa egna behållare

• Hur är det då möjligt att få denna generalla loop attfungera för den egen‐skapade behållaren?

• Det är här iteratorer kommer in

Page 53: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

23 / 51

IteratorerRange‐baserad for‐loop

for (int e : v){cout << e << endl;

}

Page 54: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

23 / 51

IteratorerRange‐baserad for‐loop

using iterator = std::vector<int>::iterator;

for (iterator it{v.begin()}; it != v.end(); ++it){cout << *it << endl;

}

Page 55: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

24 / 51

IteratorerRange‐baserad for‐loop

En behållare går att loopa igenom om:

• Det finns en inre klass som heter iterator

• Det finns medlemsfunktioner begin och end somreturnerar iterator objekt

• iterator har definierat operator++, operator*,operator== och operator!=

Page 56: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

25 / 51

IteratorerIteratorer

• Iteratorer är generaliserade pekare

• Ett generellt sätt att iterera över alla behållare påsamma sätt

• Pekar på ett element i behållaren

• Möjligt att komma åt elementet med operator*

• Gå till nästa element med operator++

Page 57: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

vector<int> v{1,2,3};

Page 58: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

vector<int> v{1,2,3};

1 2 3

Page 59: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

vector<int> v{1,2,3};

1 2 3

begin end

Page 60: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

vector<int>::iterator it{v.begin()};

1 2 3

begin end

Page 61: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

vector<int>::iterator it{v.begin()};

1 2 3

begin end

it

Page 62: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 3

begin end

it

Page 63: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 3

begin end

it

Page 64: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

int x{*it};

1 2 3

begin end

it

Page 65: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

int x{*it};

1 2 3

begin end

it

x = 2

Page 66: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

int x{*it};

1 2 3

begin end

it

x = 2

Page 67: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 3

begin end

it

x = 2

Page 68: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 3

begin end

x = 2

it

Page 69: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

*it = 4;

1 2 3

begin end

x = 2

it

Page 70: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

*it = 4;

1 2 4

begin end

x = 2

it

Page 71: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 4

begin end

x = 2

it

Page 72: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

++it;

1 2 4

begin end

x = 2

it

Page 73: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

26 / 51

IteratorerIteratorer

it == v.end();

1 2 4

begin end

x = 2

it

Page 74: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

27 / 51

IteratorerIteratorer

• Det är viktigt att end‐iteratorn inte pekar på det sistaelementet

• Annars kommer vi missa sista elementet i behållareneftersom att loopen avslutas då it == v.end()

• Den måste unikt kunna identifiera att nu är iterationenslut

• Därför tänker vi att den pekar på elementet efter sista

Page 75: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

28 / 51

IteratorerIterator kategorier

Det finns olika typer av iteratorer, dessa är:

• Input• Kan läsa befintliga värden i behållaren

• Output• Forward• Bidirectional• Random Access

Page 76: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

28 / 51

IteratorerIterator kategorier

Det finns olika typer av iteratorer, dessa är:

• Input• Output• Kan lägga till nya värden i behållaren

• Forward• Bidirectional• Random Access

Page 77: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

28 / 51

IteratorerIterator kategorier

Det finns olika typer av iteratorer, dessa är:

• Input• Output• Forward• Kan läsa/skriva över befintliga värden i behållaren• Kan stega framåt i behållaren• Är även en Input iterator

• Bidirectional• Random Access

Page 78: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

28 / 51

IteratorerIterator kategorier

Det finns olika typer av iteratorer, dessa är:

• Input• Output• Forward• Bidirectional• Kan stega bakåt i behållaren• Är även en Forward iterator

• Random Access

Page 79: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

28 / 51

IteratorerIterator kategorier

Det finns olika typer av iteratorer, dessa är:

• Input• Output• Forward• Bidirectional• Random Access• Kan hoppa till godtyckligt element i behållaren• Är även en Bidirectional iterator

Page 80: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

29 / 51

IteratorerIterator kategorier

Nedan tabell visar vilka operationer som är möjliga för deolika kategorierna

KategoriOperationer Input Output Forward Bidirectional Random Access==, != ✓ ✓ ✓ ✓ ✓*, ‐> Läsa Skriva Läsa/Skriva Läsa/Skriva Läsa/Skriva++ ✓ ✓ ✓ ✓ ✓– ‐ ‐ ‐ ✓ ✓+, +=, ‐, ‐= ‐ ‐ ‐ ‐ ✓<, <=, >, >= ‐ ‐ ‐ ‐ ✓i[n] ‐ ‐ ‐ ‐ ✓

Page 81: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

1 Kursupplägg2 Behållare3 Iteratorer4 Smartpekare

Page 82: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

31 / 51

SmartpekareKan det bli minnesfel här?

class My_Class{public:My_Class(int x, int y);~My_Class(){delete p1;delete p2;

}private:int* p1;int* p2;

};

Page 83: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

31 / 51

SmartpekareKan det bli minnesfel här?

int* create(int n){if (n >= 0){return new int{n};

}throw domain_error{"Negative"};

}

My_Class::My_Class(int x, int y): p1{create(x)}, p2{create(y)}

{ }

Page 84: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

32 / 51

SmartpekareJa, det kan bli fel!

int main(){My_Class c{0, -1};

}

Page 85: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

33 / 51

SmartpekareVarför?

• När konstruktorn avbryts kommer objektet att tas bortutan att köra destruktorn

• All data som har allokerats innan krashen kommerdärför inte avallokeras

• Hur kan vi lösa detta?

Page 86: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

34 / 51

SmartpekareLösning?

My_Class::My_Class(int x, int y) try: p1{create(x)}, p2{create(y)}

{ }catch (domain_errror& e){delete p1;

}int main(){My_Class c{-1, 0};

}

Page 87: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

34 / 51

SmartpekareLösning?

My_Class::My_Class(int x, int y) try: p1{create(x)}, p2{create(y)}

{ }catch (domain_errror& e){delete p1;

}int main(){My_Class c{-1, 0};

}

Segmentation Fault

Page 88: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

35 / 51

SmartpekareVarför?

• Nu är det p1 som kastar undantaget

• I catch‐blocket försöker vi ta bort den, men den finnsinte

• Detta ger segmentation fault

Page 89: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

36 / 51

SmartpekareLösning?

My_Class::My_Class(int x, int y): p1{create(x)}, p2{}

{try{p2 = create(y);

}catch (domain_error& e){delete p1;throw;

}}

Page 90: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

36 / 51

SmartpekareLösning?

My_Class::My_Class(int x, int y): p1{create(x)}, p2{}

{try{p2 = create(y);

}catch (domain_error& e){delete p1;throw;

}}

Funkar...

Page 91: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

36 / 51

SmartpekareLösning?

My_Class::My_Class(int x, int y): p1{create(x)}, p2{}

{try{p2 = create(y);

}catch (domain_error& e){delete p1;throw;

}}

Men till vilket pris?

Page 92: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

37 / 51

Smartpekare

Vore det inte bra ompekare kunde avallokera

sig själva?

Page 93: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

38 / 51

Smartpekare

Page 94: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

39 / 51

Smartpekarestd::unique_ptr

int main(){int* p1{new int{5}};cout << *p1 << endl;{int* p2{new int{3}};cout << *p2 << endl;delete p2;

}delete p1;

}

Page 95: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

39 / 51

Smartpekarestd::unique_ptr

#include <memory>int main(){std::unique_ptr<int> p1{new int{5}};cout << *p1 << endl;{std::unique_ptr<int> p2{new int{3}};cout << *p2 << endl;

}

}

Page 96: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

40 / 51

Smartpekarestd::unique_ptr

• är en s.k. smartpekare

• finns definierad i <memory>

• tar över ansvaret för att hantera minnet

• representerar ägarskap

• kan inte kopieras

• men det går att flytta ägarskapet

Page 97: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

41 / 51

Smartpekarestd::unique_ptr

#include <memory>using namespace std;int main(){unique_ptr<double> p{}; // nullptrp = new double{5.0};{unique_ptr<double> q{new double{1.0}};p = std::move(q);

}}

Page 98: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

42 / 51

Smartpekarestd::unique_ptr

• unique_ptr tar bort det gamla minnet när vi tilldelarnytt minne

• man ska nästan aldrig behöva avallokera minnetmanuellt

Page 99: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

43 / 51

SmartpekareFälla

#include <memory>int get(std::unique_ptr<int> p){return *p;

}int main(){std::unique_ptr<int> p{new int{5}};get(p);

}

Page 100: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

43 / 51

SmartpekareFälla

#include <memory>int get(std::unique_ptr<int> p){return *p;

}int main(){std::unique_ptr<int> p{new int{5}};get(p);

}

Kompilerar ej

Page 101: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

44 / 51

SmartpekareFälla

test.cpp: In function ‘int main’():test.cpp:9:8: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int’>]

get(p);^

In file included from /sw/gcc-7.1.0/include/c++/7.1.0/memory:80:0,from test.cpp:1:

/sw/gcc-7.1.0/include/c++/7.1.0/bits/unique_ptr.h:388:7: note: declaredhere

unique_ptr(const unique_ptr&) = delete;^~~~~~~~~~

test.cpp:2:5: note: initializing argument 1 of ‘int get(std::unique_ptr<int’>)int get(std::unique_ptr<int> p)

^~~

Page 102: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

44 / 51

SmartpekareFälla

test.cpp: In function ‘int main’():test.cpp:9:8: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int’>]

get(p);^

In file included from /sw/gcc-7.1.0/include/c++/7.1.0/memory:80:0,from test.cpp:1:

/sw/gcc-7.1.0/include/c++/7.1.0/bits/unique_ptr.h:388:7: note: declaredhere

unique_ptr(const unique_ptr&) = delete;^~~~~~~~~~

test.cpp:2:5: note: initializing argument 1 of ‘int get(std::unique_ptr<int’>)int get(std::unique_ptr<int> p)

^~~

Page 103: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

44 / 51

SmartpekareFälla

Om du ser detta såförsöker du kopiera en

unique_ptr

Page 104: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

45 / 51

SmartpekareMer om unique_ptr

int main(){std::unique_ptr<std::string> p{};// abstrahera bort allokeringenp = std::make_unique<std::string>("hej");// plocka ut en vanlig pekarestd::string* ptr{p.get()};// kom åt medlemmar i det som pekaren pekar påcout << p->size() << endl;

}

Page 105: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

46 / 51

Smartpekarestd::make_unique

• Om vi använder std::make_unique snarare än newkommunicerar vi bättre vad som händer i koden

• Det blir tydligt att koden inte kräver en delete om newinte ens förekommer

• Detta tillåter kompilatorn är resonera bättre kring kodenoch kan därför göra eventuella optimeringar som inteannars går

Page 106: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

47 / 51

Smartpekareget

• std::unique_ptr::get ska endast användas då vibehöver temporär tillgång till objektet

• den pekare som returneras av get är en icke‐ägandepekare

• detta innebär att du aldrig någonsin ska göra delete påden pekaren

• om du av någon annledning vill avallokera minnet,tilldela nullptr till smartpekaren eller anropa releasefunktionen

Page 107: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 108: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

int main(){> std::shared_ptr<int> ptr1{std::make_shared<int>(5)};

{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 109: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){> std::shared_ptr<int> ptr1{std::make_shared<int>(5)};

{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 110: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{

> std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 111: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{

> std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 112: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

> std::shared_ptr<int> ptr3{ptr1};}

}}

Page 113: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

> std::shared_ptr<int> ptr3{ptr1};}

}}

Page 114: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};> }

}}

Page 115: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};> }

}}

Page 116: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

> }}

Page 117: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

> }}

Page 118: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}>}

Page 119: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

5

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}>}

Page 120: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}>}

Page 121: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

48 / 51

Smartpekarestd::shared_ptr

int main(){std::shared_ptr<int> ptr1{std::make_shared<int>(5)};{std::shared_ptr<int> ptr2{ptr1};{

std::shared_ptr<int> ptr3{ptr1};}

}}

Page 122: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

49 / 51

Smartpekarestd::shared_ptr

• Representerar delat ägarskap

• Minnet avallokeras endast då ingen längre pekar på det

• Kostar mer än std::unique_ptr och vanliga pekare

Page 123: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

50 / 51

Smartpekare

Hur hjälper detta oss?

Page 124: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

51 / 51

SmartpekareBättre lösning!

class My_Class{public:My_Class(int x, int y);~My_Class() = default;

private:unique_ptr<int> p1;unique_ptr<int> p2;

};

Page 125: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

51 / 51

SmartpekareBättre lösning!

My_Class::My_Class(int x, int y): p1{create(x)}, p2{create(y)}

{ }

Page 126: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

51 / 51

SmartpekareBättre lösning!

My_Class::My_Class(int x, int y): p1{create(x)}, p2{create(y)}

{ }

Perfektion!

Page 127: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •

www.liu.se