TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf ·...
Transcript of TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf ·...
![Page 1: TDDI82 - Objektorienterad problemlösning - Standardbiblioteket ITDDI82/lecture/slides/stl_I.pdf · 2021. 3. 30. · 5/51 Kursupplägg Kursmoment • Labserie • 2laborationer •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/1.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/2.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/3.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/4.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/5.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/6.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/7.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/8.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/9.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/10.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/11.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/12.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/13.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/14.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/15.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/16.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/17.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/18.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/19.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/20.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/21.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/22.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/23.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/24.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/25.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/26.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/27.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/28.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/29.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/30.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/31.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/32.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/33.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/34.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/35.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/36.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/37.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/38.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/39.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/40.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/41.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/42.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/43.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/44.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/45.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/46.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/47.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/48.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/49.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/50.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/51.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/52.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/53.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/54.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/55.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/56.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/57.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/58.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/59.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/60.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/61.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/62.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/63.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/64.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/65.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/66.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/67.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/68.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/69.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/70.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/71.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/72.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/73.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/74.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/75.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/76.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/77.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/78.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/79.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/80.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/81.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/82.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/83.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/84.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/85.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/86.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/87.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/88.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/89.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/90.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/91.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/92.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/93.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/94.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/95.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/96.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/97.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/98.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/99.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/100.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/101.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/102.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/103.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/104.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/105.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/106.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/107.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/108.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/109.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/110.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/111.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/112.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/113.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/114.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/115.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/116.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/117.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/118.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/119.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/120.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/121.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/122.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/123.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/124.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/125.jpg)
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 •](https://reader036.fdocument.pub/reader036/viewer/2022081512/612975665cec8b51f2306110/html5/thumbnails/126.jpg)
51 / 51
SmartpekareBättre lösning!
My_Class::My_Class(int x, int y): p1{create(x)}, p2{create(y)}
{ }
Perfektion!