TDDC76 - Programmering och Datastrukturer

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

TDDC76 - Programmering och Datastrukturer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

Tommy Färnqvist, IDA, Linköpings universitet

TDIU01 - Programmering i C++, grundkurs

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

TDIU01 (725G67) - Programmering i C++, grundkurs

C++ - En introduktion

TDDC76 Programmering och datastrukturer

TDIU01 - Programmering i C++, grundkurs

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

TDDC76 - Programmering och Datastrukturer

TDIU01 Programmering i C++

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

Minnestilldelning (allokering) och frigörande (avallokering) av minne

TDDC76 - Programmering och Datastrukturer

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

Intro till standardbiblioteket. Eric Elfving

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Innehåll. Resurshantering. Resource handles. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 6. Resurshantering

TDIU01 - Programmering i C++, grundkurs

Föreläsning 6: Introduktion av listor

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

TDDC76 - Programmering och Datastrukturer

Föreläsning 10. Pekare (Pointers)

Innehåll. Pekare Syntax

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

2 Pekare och dynamiska variabler.

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

C++ - En introduktion

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

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

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

Skizz till en enkel databas

Det finns många flaggor till g++,

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Tentamen EDAF30 Programmering i C++

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

Föreläsning 5: Introduktion av pekare

5 Arv och dynamisk bindning FIGUR

Övning från förra gången: readword

*Pekarvärden *Pekarvariabler & *

TDIU01 - Datortenta (DAT2)

Pekare och arrayer. Indexering och avreferering

TDDC77 Objektorienterad Programmering

Introduktionslaboration

DD2387 Programsystemkonstruktion med C++ Tentamen 2

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Att använda pekare i. C-kod

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Programmering av inbyggda system. Pekare och Arrayer. Ulf Assarsson. Originalslides av Viktor Kämpe

Innehåll. EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Viktiga skillnader mot Java

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

TDDC76 - Programmering och Datastrukturer

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

KLASSER. Inkapsling Abstrakt datatyp Public och private. Klassmedlemmar Datamedlemmar Exempel Funktionsmedlemmar

Tillämpad programmering

struct egendefinierad typ struct LECTURE_TYPE { char teacher[99]; float lengthinminutes; char type; /* L = lecture, E = exercise */ };

Enkla datatyper minne

Introduktionslaboration

1 Klasser och objektorientering Vad är objektorientering?

Första exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,

C++ Objektorientering - Klasser. Eric Elfving

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

grundläggande C++, funktioner m.m.

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

TDDC76 - Programmering och Datastrukturer

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

TDIU01 - Datortenta (DAT2)

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

Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering

+Överskådlighet Normalt sätt blir ett program skrivet i det procedurella paradigmet överskådligt. Modifikationer på delproblem kan ske med lätthet.

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

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

Föreläsning 3.1: Datastrukturer, en översikt

Tentamen EDAF30 Programmering i C++

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

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

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

1 Namnkontroll (NameControl)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Innehåll. Pekare Exempel

Innehåll. Pekare Exempel

Poster ( structar ) Postdeklarationer

Övningar Dag 2 En första klass

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

Tentamen i DD2387 Programsystemkonstruktion med C++

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

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

Imperativ programmering (Fö 1 2) C++ Ett första programexempel. Enkel in- och utmatning strömbiblioteket

Objektorientering: Lagring och livstid

Transkript:

TDDC76 - Programmering och Datastrukturer Pekare och Listor Eric Elfving Institutionen för datavetenskap

1 / 21 Översikt Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor

2 / 21 Internminne - RAM Datorns internminne (RAM, random access memory) består av en ordnad sekvens bitar Vi kan normalt sett adressera (komma åt) en byte i taget (8 bitar)

3 / 21 Minne

4 / 21 Minne Vad händer i minnet? int x {3421}; x: int 3421

5 / 21 Variabler En variabel har alltid: Ett namn En datatyp Ett värde En adress

6 / 21 Pekare En pekare lagrar en adress till en given position i minnet Deklareras med en asterisk (*) int * ip;

7 / 21 Pekare Man kan ta fram adressen till en variabel med adressoperatorn (&) int x {3421}; int * ip {&x}; int x: ip: 3421

8 / 21 Pekare För att komma åt det värde en pekare pekar på används avrefereringsoperatorn (*) #include <iostream> using namespace std; int main() { int x {3421}; int *ip {&x}; cout << ip << endl; cout << *ip << endl; return 0; } 14 3421 Vi får bara avreferera pekare som pekar på adresser som vårt program äger

9 / 21 Pekare Pekare används oftast för att skapa dynamiskt minne Vi allokerar nytt minne med new-operatorn Vi kan endast nå det nya utrymmet med hjälp av pekaren int* ip; ip = new int; *ip = 5123; int * ip {new int{5123}};

10 / 21 Pekare Minnesläcka Om vi redan pekar på en minnesadress och ber om nytt utrymme tappar vi bort det vi pekade på. Detta kallas minnesläcka, ett av de vanligaste felen när vi jobbar med pekare Vi äger fortfarande utrymmet, men har inget sätt att nå det int* ip {new int{44}}; ip = new int{123}; int 44 int ip: 123

11 / 21 Pekare Om vi vill lämna tillbaka minne till operativsystemet gör vi det med delete-operatorn int *ip {new int{345}}; int ip: 345 delete ip; int ip: 345 OBS, delete ändrar inte på pekarens värde!

12 / 21 Pekare Värdet nullptr betyder inget värde för pekare 1 int * ip{}; // ip sätts till nullptr 2 ip = new int{}; // det nya heltalet får värdet 0 3 delete ip; 4 ip = nullptr; kodrad: 1 2 3 4 Minnet: int ip: ip: 0 int ip: 0 ip:

13 / 21 Pekare void f(int *p) { delete p; p = new int{2}; } int main() { int *ptr {new int{12}}; f(ptr); cout << *ptr << endl; delete ptr; } Vad händer?

14 / 21 Pekare Precis som vanligt måste vi ta emot referenser om vi vill ändra på värden: void f(int *& p) { delete p; p = new int{2}; } int main() { int *ptr {new int{12}}; f(ptr); cout << *ptr << endl; delete ptr; }

15 / 21 Alias Om man tycker det är jobbigt med alla asterisker kan man skapa ett nytt namn för en typ med aliasdefinition Skrivs på formen using NAMN = TYPBESKRIVNING; using int_ptr = int *; void f(int_ptr & p); int main() { int_ptr ptr { new int{4} }; delete ptr; }

16 / 21 Pekare till poster För att komma åt fälten i poster kan man använda sig av medlemsåtkomstoperatorn (->) struct Book { string title; string author; int pages; }; Book *bp { new Book }; bp->title = "C++ Primer"; Man kan använda avreferering också, men då krävs parenteser cout << (*bp).title << endl;

17 / 21 Dynamiska datastrukturer En dynamisk datastruktur kan ändra storlek under programkörningen Vi har redan använt en dynamisk datastruktur, string Det finns många fler inbyggda i std, exempelvis vector som kan lagra flera värden av en viss typ.

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position 7 0 4 12 17 0 1 2 3

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken 7 0 4 12 17? 0 1 2 3 4

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position 7 0 4 12 17? 0 1 2 3 4

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position 7 0 4 12 17 17 0 1 2 3 4

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position Stoppa in värdet 7 0 4 12 12 17 0 1 2 3 4

18 / 21 Dynamiska datastrukturer Tänk er att vi vill stoppa in ett värde sorterat i en vector. Då behöver vi: Hitta rätt position Utöka storleken Flytta alla värden som ligger efter hittad position Stoppa in värdet 7 0 4 7 12 17 0 1 2 3 4

19 / 21 Enkellänkade listor En enkellänkad lista består av noder. En nod är en post som innehåller två saker, ett värde av någon datatyp samt en pekare till nästa nod i listan. Detta gör en pekare till en nod till en lista. Tom lista (eller slutet av listan) markeras med pekarvärdet nullptr. 3 7 9

20 / 21 Enkellänkade listor 3 7 9

21 / 21 Enkellänkade listor Deklaration av en listtyp: struct List_Node { int data; List_Node * next; }; Alternativ lösning med alias: struct List_Node; using List = List_Node *; struct List_Node { int data; List next; };

Eric Elfving Institutionen för datavetenskap www.liu.se