Trädtraversering. Binärt träd. Trädtraversering djupet-först. Trädtraversering bredden-först
|
|
- Lars-Olof Bergqvist
- för 6 år sedan
- Visningar:
Transkript
1 TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 69 Binärt träd TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 70 Trädtraversering struct Tree_Node Tree_Node(const std::string& value) : data_ value Tree_Node(const std::string& value, Tree_Node* left, Tree_Node* right) : data_ value, left_ left, right_ right root_: Besöka alla noder i trädet på ett systematiskt sätt, olika varianter: djupet först vänster-till-höger eller höger-till-vänster preorder (prefix) inorder (infix) postorder (postfix) bredden först (nivåtraversering) kan göras med hjälp av en kö ~Tree_Node() delete left_; delete right_; std::string data_; ; Tree_Node* left_ nullptr ; Tree_Node* right_ nullptr ; class Tree private: Tree_Node* root_ nullptr ; ; TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 71 Trädtraversering djupet-först void traverse(tree_node* tree, void (*op)(tree_node*)) if (tree) traverse(tree->left_, op); op(tree); traverse(tree->right_, op); vänster-till-höger inorder (infix) traversering vänster subträd behandlas noden ifråga behandlas höger subträd behandlas operationen som ska utföras på varje nod skickas med i form av en funktionspekare TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 72 Trädtraversering bredden-först void traverse(tree_node* tree, void (*op)(tree_node*)) if (tree) std::queue<tree_node*> nodes; nodes.push(tree); while (!nodes.empty()) Tree_Node* current_node = nodes.front(); nodes.pop(); vänster till höger if (current_node->left_ ) nodes.push(current_node->left_); if (current_node->right_ ) nodes.push(current_node->right_); op(current_node); nivå för nivå tomma träd ignoreras ett alternativ kan vara att köa även tompekare
2 TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 73 Bestämma djupet hos ett träd Innebär också att alla noder kommer att besökas. TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 74 Trädsökning rekursiv lösning Innebär att följa en specifik väg ner genom trädet. int depth(const Tree_Node* tree) if (tree) return 1 + max(tree->depth(tree->left_), tree->depth(tree->right_)); return 0; rotnoden i ett träd har per definition djupet 0 djupet för en nod är väglängden från roten till noden ett löv har per definition höjd 0 höjden för rotnoden är den längsta väglängden till något av löven Tree_Node* find(std::string x, Tree_Node* tree) if (tree && tree->data_!= x) if (x < tree->data_) return find(x, tree->left_); return find(x, tree->right_); return tree; endast noder utmed en specifik sökväg besöks TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 75 Trädsökning iterativ lösning Enkel och utan rekursion. Tree_Node* find(std::string, Tree_Node* tree) while (tree && tree->data_!= x) if (x < tree->data_) tree = tree->left_; tree = tree->right_; return tree; iteration är normalt att föredra jämfört med rekursion fall som detta lika enkel algoritm TDDI14 Objektorienterad programmering Fö: Binära träd, uttrycksträd 76 Uttrycksträd Ett tilldelningsuttryck som X = (A + B / C) * (D - E / F) representeras av följande uttrycksträd. = X * + - A / D / B C E F alla operander är löv de finns i samma ordning från vänster till höger i trädet som i uttrycket alla operatorer är inre noder binära operatorer med sina två operander som vänster respektive höger subträd varje subträd representerar ett deluttryck parenteser behövs inte Vilket resultat ger respektive variant av trädtraversering enligt djupet först med följande operation? void print(tree_node* t) cout << t->data_ << ;
3 TDDI14 Objektorienterad programmering Fö: Undantagsklasser 77 Standardundantag TDDI14 Objektorienterad programmering Fö: Undantagsklasser 78 Standardundantagen exception logic_error domain_error invalid_argument length_error out_of_range future_error runtime_error range_error overflow_error underflow_error system_error ios_base::failure bad_typeid bad_cast bad_weak_pointer bad_exception bad_function_call bad_alloc bad_array_new_length exempelvis kastad av/om: otillåtna funktionsvärden bitset-konstruktor objekts längd överskrids at() funktioner i trådbiblioteket vissa beräkningar bitset::to_long() vissa beräkningar systemrelaterade funktioner ios_base::clear() typeid dynamic_cast std::shared_ptr-konstruktorer brott mot exceptionspecification std::function::operator() new new[] klassen exception är basklass för nästan alla andra standardundantag en del direkta subklasser till exception används för att kasta undantag bad_exception, t.ex. logic_error representerar sådant som beror på fel i programmets logik och i teorin förebyggbart domain_error, invalid_argument, length_error, out_of_range runtime_error representerar sådant som beror på fel utanför programmets kontroll och inte enkelt kan förutses range_error, overflow_error, underflow_error, system_error några undantagsklasser är inte härledda från exception nested_exception, t.ex. TDDI14 Objektorienterad programmering Fö: Undantagsklasser 79 Basklassen exception class exception exception() noexcept; exception(const exception& e) noexcept; ; virtual ~exception(); exception& operator=(const exception& e) noexcept; virtual const char* what() const noexcept; polymorf klass inte abstrakt men bör endast användas som basklass för mer användbara undantagsklasser defaultkonstruktor kopieringskonstruktor virtuell destruktor (kastar per definition inte undantag) kopieringstilldelningsoperator virtuell funktion what() noexcept specificerar att funktionen inte kastar undantag viktigt att undantag inte i sin tur kan kasta nya undantag TDDI14 Objektorienterad programmering Fö: Undantagsklasser 80 Regler för generering av flyttkonstruktor och flyttilldelningsoperator Klassen exception är en bra klass för att ta upp detta. flyttkonstruktor genereras endast om klassen inte har en användardeklarerad kopieringskonstruktor inte har en användardeklarerad kopieringstilldelningsoperator inte har en användardeklarerad flyttilldelningsoperator inte har en användardeklarerad destruktor flyttilldelningsoperator genereras endast om klassen inte har en användardeklarerad kopieringskonstruktor inte har en användardeklarerad flyttkonstruktor inte har en användardeklarerad kopieringstilldelningsoperator inte har en användardeklarerad destruktor exception har en användardeklarerad kopieringskonstruktor, kopieringstilldelningsoperator och destruktor varken flyttkonstruktor eller flyttilldelningsoperator genereras alltså
4 TDDI14 Objektorienterad programmering Fö: Undantagsklasser 81 En av de direkta subklasserna logic_error Standarden anger endast konstruktorerna men i praktiken definieras logic_error så här. class logic_error : public std::exception explicit logic_error(const std::string& what_arg) : msg_(what_arg) explicit logic_error(const char* what_arg) : msg_(what_arg) virtual const char* what() const noexcept return msg_.data(); private: string msg_; ; defaultkonstruktor genereras inte, eftersom en annan konstruktor har deklarerats kopieringstilldelningsoperator genereras flyttkonstruktor och flyttilldelningsoperator genereras inte, eftersom kopieringskonstruktorn deklareras destruktor kommer att genereras och vara virtual what() överskuggar what() deklarerad i exception TDDI14 Objektorienterad programmering Fö: Undantagsklasser 82 En av subklasserna till logic_error length_error class length_error : public std::logic_error explicit length_error(const std::string& what_arg) : std::logic_error(what_arg) ; explicit length_error(const char* what_arg) : std::logic_error(what_arg) defaultkonstruktor genereras inte, eftersom en annan konstruktor har deklarerats kopieringstilldelningsoperator genereras flyttkonstruktor och flyttilldelningsoperator genereras inte, eftersom en kopieringskonstruktor deklareras destruktor genereras what() ärvs som den är från logic_error TDDI14 Objektorienterad programmering Fö: Undantagsklasser 83 Egendefinierad undantagsklass Härled från exempelvis logic_error class some_error : public std::logic_error explicit some_error(const std::string& what_arg) : std::logic_error(what_arg) ; explicit some_error(const char* what_arg) : std::logic_error(what_arg) Dessutom följande genererade eller ärvda funktionalitet: kopieringskonstruktor kopieringstilldelningsoperator destruktor what() TDDI14 Objektorienterad programmering Fö: Undantagsklasser 84 Hantering av undantag try do cout << "Ange en radposition, avsluta med -1: "; cin >> pos; cout << line.at(pos) << endl; while (pos > -1); catch (const out_of_range& e) cout << e.what() << endl; catch (const exception& e) cout << e.what() << endl; catch (...) cout << "Ett oväntat fel har inträffat" << endl; catch-hanterarna går från specialiserade till mer generella out_of_range exception vad-som-helst
5 TDDI14 Objektorienterad programmering Fö: Polymorf lista 85 TDDI14 Objektorienterad programmering Fö: Polymorf lista 86 Länkad lista med polymorfa listnoder Konstruerad som en containerklass med två slags listnoder Data_Node lagrar de data som satts i i en lista Null_Node anger slutet av en lista, lagrar inga data Data_Node och Null_Node är härledda från en gemensam basklass List_Node List klass som representerar en ordnad lista lagrar en pekare till Null_Node om listan är tom List_Node abstract Data_Node Null_Node List_Node abstrakt, polymorf basklass för listnoder struct List_Node List_Node() = default; List_Node(const List_Node&) = delete; virtual ~List_Node() = default; List_Node& operator=(const List_Node&) = delete; // används av Null_Node() virtual List_Node* insert(int value) = 0; virtual List_Node* remove(int value) = 0; virtual const List_Node* find(int value) const = 0; Data_Node om listan innehåller ett eller flera värden virtual int length() const = 0; virtual bool empty() const = 0; ; virtual List_Node* clone() const = 0; alla speciella medlemsfunktioner för kopiering elimineras för listnodklasserna endast polymorf kopiering med funktionen clone() tillåts operationer är implementerade med hjälp av polymorfi och rekursion iteratorer ska finnas för List men har utelämnats i exemplen (motsvarande uppgift ska göras i laboration Listan) TDDI14 Objektorienterad programmering Fö: Polymorf lista 87 Data_Node nodtyp för att lagra ett insatt värde TDDI14 Objektorienterad programmering Fö: Polymorf lista 88 Null_Node markerar slutet på en lista struct Data_Node : public List_Node Data_Node(int value, List_Node* next) : data_ value, next_ next Data_Node(const Data_Node&) = delete; ~Data_Node() delete next_; Data_Node& operator=(const Data_Node&) = delete; Data_Node* insert(int value) override; List_Node* remove(int value) override; const List_Node* find(int value) const override; int length() const override; bool empty() const override; struct Null_Node final : public List_Node Null_Node() = default; Null_Node(const Null_Node&) = delete; ~Null_Node() = default; Null_Node& operator=(const Null_Node&) = delete; Data_Node* insert(int value) override; Null_Node* remove(int value) override; const List_Node* find(int value) const override; int length() const override; bool empty() const override; // används av List ; Data_Node* clone() const override; int data_; List_Node* next_; ; Null_Node* clone() const override; Observera i den givna koden är medlemsfunktioner som är enkla definierade i klassen. Observera i den givna koden är alla medlemsfunktioner definierade i klassen.
6 TDDI14 Objektorienterad programmering Fö: Polymorf lista 89 List en containerklass TDDI14 Objektorienterad programmering Fö: Polymorf lista 90 En containerklass ska alltid ha swap-funktioner class List List() : list_ new Null_Node List(const List& other) : list_ copy(other.list_) List(List&& other) noexcept : List() swap(other); ~List() delete list_; List& operator=(const List& rhs) &; List& operator=(list&& rhs) & noexcept; void insert(int value); void remove(int value); bool member(int value) const; int length() const; bool empty() const; void clear(); void swap(list& other) noexcept; // Iteratorer private: List_Node* list_; // delegering till List() // Även icke-medlem-swap finns Medlem void List::swap(List& other) std::swap(list_, other.list_); Icke-medlem void swap(list& a, List& b) a.swap(b); Argumenten till std::swap() är pekare standarden garanterar att undantag inte kastas. ; static List_Node* copy(const List_Node* p); TDDI14 Objektorienterad programmering Fö: Polymorf lista 91 Radera en listas innehåll TDDI14 Objektorienterad programmering Fö: Polymorf lista 92 List konstruktorer och destruktor void List::clear() if (!empty()) Data_Node* garbage = dynamic_cast<data_node*>(list_); Data_Node* p = garbage; while (!dynamic_cast<null_node*>(p->next_)) p = dynamic_cast<data_node*>(p->next_); // p pekar på datanoden direkt före null-noden list_ = p->next_; p->next_ = nullptr; delete garbage; // pekare till datanoderna i listan // behåll null-noden // länka ur den // radera alla datanoder Defaultkonstruktor List() : list_ new Null_Node initierar listan till tom lista en Null_Node Kopieringskonstruktor List(const List& other) : list_ copy(other.list_) kopierar listan av noder i other Flyttkonstruktor List(List&& other) noexcept : List() swap(other); initierar det nya List-objektet till tom lista och byter sedan innehåll med other delegerar initiering av list_ till List() innan bytet med swap() ska deklareras noexcept list_ har typen List_Node* måste typomvandlas till Data_Node* för att kunna initiera garbage datamedlemmen next_ har typen List_Node* måste typomvandlas till Data_Node* för att kunna tilldelas p inuti while-satsen typomvandlingen i while-satsen styruttryck kontrollerar om nästa nod är null-noden Destruktor ~List() delete list_; rekursiv destruering av noderna i listan när detta är gjort upphör List-objektet att existera
7 TDDI14 Objektorienterad programmering Fö: Polymorf lista 93 List tilldelningsoperatorer Kopieringstilldelningsoperator List& List::operator=(const List& rhs) & List rhs.swap(*this); return *this; ref-qualifier & tilldelning kan endast användas på vänsterargument som är lvalue (ska vara en variabel) implementeras med idiomet skapa en temporär och byt undantag kan kastas när det temporära objektet ska initieras startk undantagssäkert dock ska deklareras med ref-qualifer & Flyttilldelningsoperator List& List::operator=(List&& rhs) & noexcept clear(); swap(rhs); return *this; vänsterargumentets innehåll raderas blir tom lista vänsterargumentet och högerargumentet byter innehåll högerargumentet blir en tom lista ska deklareras med ref-qualifer & och noexcept TDDI14 Objektorienterad programmering Fö: Polymorf lista 94 Intern kopiering av lista List_Node* List::copy(const List_Node* p) return p->clone(); // clone() kan kasta undantag Data_Node* Data_Node::clone() const // Att göra Om undantag kastas här läcker minnet för den redan kopierade svansen! return new Data_Node data_, next_->clone() ; Null_Node* Null_Node::clone() const // Att göra Om undantag kastas här läcker något minne? return new Null_Node; Obsererva override används inte utanför klassen. TDDI14 Objektorienterad programmering Fö: Polymorf lista 95 Listans längd int List::length() const return list_->length(); TDDI14 Objektorienterad programmering Fö: Polymorf lista 96 Finns ett visst värde i listan? bool List::member(int value) const return list_->find(value)!= nullptr; int Data_Node::length() const return 1 + next_->length(); int Null_Node::length() const return 0; const List_Node* Data_Node::find(int value) const if (data_ == value) return this; return next_->find(value); const List_Node* Null_Node::find(int) const return nullptr; // Deklarera ej namn för parameter
8 TDDI14 Objektorienterad programmering Fö: Polymorf lista 97 Är listan tom? bool List::empty() const return list_->empty(); TDDI14 Objektorienterad programmering Fö: Polymorf lista 98 Sätta in ett värde i listan void List::insert(int value) list_ = list_->insert(value); bool Data_Node::empty() const return false; bool Null_Node::empty() const return true; Data_Node* Data_Node::insert(int value) if (value < data_) return new Data_Node value, this ; next_ = next_->insert(value); return this; // Om undantag kastas läcker minne? Data_Node* Null_Node::insert(int value) return new Data_Node value, this ; // Om undantag kastas läcker minne? TDDI14 Objektorienterad programmering Fö: Polymorf lista 99 Ta bort värde ur listan (det först hittade) void List::remove(int value) list_ = list_->remove(value); List_Node* Data_Node::remove(int value) if (value == data_) List_Node* next next_ ; next_ = nullptr; delete this; return next; next_ = next_->remove(value); return this; // Rekursiv destruktor noden måste länkas ur helt innan destruering Null_Node* Null_Node::remove(int) return this; // Värdet fanns inte
Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )
TDDC76 PoD OH Föreläsning C++ 83 Operatoröverlagring endast operatorsymboler definierade i C++ kan överlagras + - * / % ^ & ~! > = += -= *= /= %= ^= &= = = < > = ==!= && ++ -- -> ->*, [ ]
TDIU01 Programmering i C++
TDIU01 Programmering i C++ Föreläsning 6 - Klasser Eric Elfving, eric.elfving@liu.se Institutionen för datavetenskap (IDA) Avdelningen för Programvara och system (SaS) Klasser När vi skapade vår lista
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Klasser - speciella medlemsfunktioner Eric Elfving Institutionen för datavetenskap En klass ansvarar ofta för en resurs. Ibland är resursen så enkel som en datamedlem
Skapa, kopiera och destruera klassobjekt
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för Programvara och system Tommy Olsson 2013-08-12 Skapa, kopiera och destruera klassobjekt Detta dokument tar upp viktiga, grundläggande
Lektionsuppgifter. TDDI14 Objektorienterad programmering. Lektionsplanering Lektion Lektion Lektion
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Programvara och system Tommy Olsson 2014-02-05 Lektionsplanering.................................. 2 Lektion 1..........................................
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Klas Arvidsson Institutionen för datavetenskap 1 / 33 UML UML är ett grafiskt språk som (bland mycket annat) används för
Tommy Färnqvist, IDA, Linköpings universitet
Föreläsning 9 Pekare, länkade noder, länkade listor TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 25 september 2015 Tommy Färnqvist, IDA, Linköpings
Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt
Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index
Programsystem konstruktion med C++ (2D1387) Innehåll. övning 2 klasser och arv
Programsystem konstruktion med C++ (2D1387) övning 2 klasser och arv Ronnie Johansson rjo@nadakthse grupp 4 2003 09 25 Innehåll Klasskonstruktorer och initieringslistor Klassdestruktorer Åtkomstkontroll
Kapitel 6 - Undantag
Kapitel 6 Undantag Kapitel 6 - Undantag Undantag (exceptions), returvärden throw, try och catch new, bad_alloc, nothrow Undantag och std::auto_ptr throw() i funktionsdeklaration try som funktionskropp
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6
TDIU20 - Objektorienterad programmering i c++ - föreläsning 6 Pontus Haglund och Gustav L'estrade anpassade slides av Klas Arvidsson Department of Computer and information science 1 Arv (Specialisering)
Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv utan polymorfism
Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42
Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser
Föreläsning 9 Innehåll
Föreläsning 9 Innehåll Träd, speciellt binära träd egenskaper användningsområden implementering Datavetenskap (LTH) Föreläsning 9 HT 2017 1 / 31 Inlämningsuppgiften De föreläsningar som inlämningsuppgiften
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00
DD2387 Programsystemkonstruktion med C++ Tentamen 1 Torsdag 7 januari 2016, 14:00-18:00 Introduktion Skriv dina svar på separata papper, dessa scannas in efter inlämning. Du kan skriva på både fram- och
Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {
Innehåll EDAF30 Programmering i C++ Arv. Polymorfism. Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Kort om dynamisk polymorfism Virtuella funktioner 2 Arv i C++ Konstruktorer och destruktorer Tillgänglighet
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar
Innehåll EDAF30 Programmering i C++ 9. Polymorfism och arv Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Typomvandling 2 Klasser Polymorfism och arv Konstruktorer och destruktorer Tillgänglighet Arv
TDDC76 - Programmering och Datastrukturer
TDDC76 - Programmering och Datastrukturer Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser.
TDDI14 Objektorienterad programmering
LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för datavetenskap Avdelningen för programvara och system Tommy Olsson 2015-05-27 Datortentamen i TDDI14 Objektorienterad programmering Provkod DAT1 Datum 2015-06-01
Laboration 3. Kalkylator för aritmetiska uttryck. Kalkylatorn ska kunna läsa antingen enbokstavskommandon eller infixuttryck. Exempel på infixuttryck:
TDDC76 Laborationshandledning 1 Laboration 3 Kalkylator för aritmetiska uttryck I den här uppgiften att du ska arbeta med ett program för att behandla enkla aritmetiska uttryck. Delar av programmet är
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4
TDIU20 - Objektorienterad programmering i c++ - föreläsning 4 Pontus Haglund Department of Computer and information science 1 Vad gjorde vi förra gången? Felhantering Operatorer Typkonvertering 2 Grundläggande
Innehåll. Pekaren this Självreferens. Klasser Resurshantering, representation. Överlagring av operatorer. Överlagring av operatorer
Innehåll EDAF30 Programmering i C++ 8. Klasser; resurshantering och polymorfism Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Klasser 2 Operatorer 3 Klasser, resurshantering Rule of three Move semantics
Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap
Objektorientering - Arv och polymorfi Eric Elfving Institutionen för datavetenskap 1 / 25 Med hjälp av arv kan vi bryta ut saker som är gemensamt hos flera klasser. Vi får också möjlighet att referera
TDDC76 PoD OH Föreläsning C Klasser
TDDC76 PoD OH Föreläsning C++ 48 Klasser Ett posttyp class eller struct: komponenterna kallas medlemmar grundläggande är datamedlemmar och medlemsfunktioner struct används lämpligtvis då alla medlemmar
Klassmedlemmar. Klasser. Konstruktion av en enskild, icke-trivial klass. Klassen String funktionalitet
TDDC76 PoD OH Föreläsning C++ 48 Klasser Ett posttyp class eller struct: komponenterna kallas medlemmar grundläggande är datamedlemmar och medlemsfunktioner struct används lämpligtvis då alla medlemmar
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta
Tentamen, Algoritmer och datastrukturer
UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och
Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33
Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation
TDDC76 Programmering och datastrukturer
TDDC76 Programmering och datastrukturer Arv, polymorfi och objektorienterad programmering Oskar Holmström Institutionen för datavetenskap Agenda 1 Pekare 2 Arv 3 Statisk bindning 4 Polymorfi 5 Destruktorer
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Innehåll. Pekare Exempel
Innehåll EDAF30 Programmering i C++ Avslutning. Sammanfattning och frågor 1 Syntax, förklaringar Sven Gestegård Robertz Datavetenskap, LTH 2016 2 Stack-allokering Heap-allokering: new och delete 3 Avslutning.
Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd
Föreläsning 8 Innehåll Datastrukturer i kursen Träd, speciellt binära träd egenskaper användningsområden implementering Undervisningsmoment: föreläsning 8, övningsuppgifter 8, lab 4 Avsnitt i läroboken:
Kalkylator för aritmetiska uttryck
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2016-08-26 Kalkylator för aritmetiska uttryck I den här uppgiften ska du arbeta med ett program för att behandla enkla aritmetiska
Klasser. Kapitel 2. Kapitel 2 - Klasser, medlemmar och arv. Klasser. Klasser Medlemmar Arv
Kapitel 2 Klasser Medlemmar Arv, medlemmar och arv Klasser, åtkomst Medlemmar, medlemsfunktioner, inline och destruktorer this-pekaren Arv, åtkomst Multipelt arv, virtuell basklass Konstanta funktioner
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2013-11-25 Idag Starkt sammanhängande komponenter Duggaresultat Sökträd Starkt sammanhängande komponenter Uppspännande skog Graf, och en möjlig
Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen
Föreläsning 9 Innehåll Inlämningsuppgiften De föreläsningar som inlämningsuppgiften bygger på är nu klara. Det är alltså dags att börja arbeta med inlämningsuppgiften. Träd, speciellt binära träd egenskaper
Introduktion till arv
Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering
Klasser. Konstruktion av en enskild, icke-trivial klass
TDDI14 Objektorienterad programmering Fö: Konstruktion av en enskild, icke-trivial klass 4 Klasser Konstruktion av en enskild, icke-trivial klass en egen strängklass String välkänd datatyp containerliknande
Klasser. Klassen String funktionalitet. Klassen String funktionalitet, forts. Klassen String funktionalitet, forts. Vad ska man kunna göra?
TDDI14 Objektorienterad programmering Fö: Konstruktion av en enskild, icke-trivial klass 4 Klasser Konstruktion av en enskild, icke-trivial klass en egen strängklass String välkänd datatyp containerliknande
Innehåll. Parametriserade typer. Klassmallar. Klassmallen Vektor Konstructor med std::initializer_list. Klassmallen Vektor Medlemsfunktioner
Innehåll EDAF30 Programmering i C++ 10. Generisk programmering. Mallar och funktionsobjekt Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Funktionsobjekt Mallar med variabelt antal argument 10. Generisk
Objektorientering - Arv och polymorfi
Objektorientering - Arv och polymorfi För kurserna TDDC76 och TDIU20 Klas Arvidsson Institutionen för datavetenskap 1 / 38 UML UML är ett grafiskt språk som (bland mycket annat) används för att beskriva
Föreläsning 13. Träd
Föreläsning 13 Träd Träd Ett träd är en datastruktur som tillåter oss att modellera sådant som vi inte kan modellera med linjära datastrukturer. Ett datavetenskapligt träd består av noder med pilar emellan.
Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor
Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.
Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34
Programmering i C++ EDAF30 Dynamiska datastrukturer EDAF30 (Föreläsning 11) HT 2014 1 / 34 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd Säkrare minneshantering (shared_ptr och unique_ptr)
TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.
1 (8) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Skriv inga lösningar i tesen. Skriv ditt idnummer
Föreläsning 9 Innehåll
Föreläsning 9 Innehåll Binära sökträd algoritmer för sökning, insättning och borttagning, implementering effektivitet balanserade binära sökträd, AVL-träd Abstrakta datatyperna mängd (eng. Set) och lexikon
Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del2 Klasser, medlemmar och arv Ämnesområden denna föreläsning: Klasser, åtkomst Medlemmar, medlemsfunktioner, inline Slide 1 Konstruktorer Destruktorer
Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31
Programmering i C++ EDA623 Dynamiska datastrukturer EDA623 (Föreläsning 11) HT 2013 1 / 31 Dynamiska datastrukturer Innehåll Länkade listor Stackar Köer Träd EDA623 (Föreläsning 11) HT 2013 2 / 31 Länkade
Kalkylator för aritmetiska uttryck
Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2018-10-09 Kalkylator för aritmetiska uttryck I den här uppgiften ska du arbeta med ett program för att behandla enkla aritmetiska
Tillämpad programmering
Tillämpad programmering C++ objekt Johan Montelius 1 struct struct Person { string name; int age; ; Person p; p.name = Joe ; p.age = 42; cout
TDDC76 PoD OH Föreläsning C Härledda klasser
TDDC76 PoD OH Föreläsning C++ 97 Härledda klasser C++ har en relativt komplett och därmed komplicerad modell för härledning/arv stödjer flera sätt för subklasser att ärva från sina basklasser enkelt arv
Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
Programsystemkonstruktion med C++
Programsystemkonstruktion med C++ Övning 2 Daniel Aarno bishop@kth.se Översikt övning 2 Klasser Konstruktorer Destruktorer Arv Virtuella funktioner Abstrakta klasser Operatorer Templateklasser Templatefunktioner
Föreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Det är extra mycket
*:85/ID200V C++ HT07. Föreläsning 8 Medlemspekare Undantagshantering Namnrymder
*:85/ID200V C++ HT07 Föreläsning 8 Medlemspekare Undantagshantering Namnrymder Medlemspekare Ibland uppstår behovet att peka ut en viss medlem, som skall behandlas i olika objekt. C++ har begreppet medlemspekare
Dynamisk bindning och polymorfism
Dynamisk bindning och polymorfism I C++ är pekare till basklasser polymorfa, dvs de kan peka på objekt av en subklass typ Vid statisk bindning sker all bindning vid kompileringen -> Vid ett metodanrop
Innehåll. Resource handles. Resurshantering. Minnesallokering. Minnesallokering Exempel: allokering på stacken. 7. Resurshantering, Felhantering
Innehåll EDAF30 Programmering i C++ 7. Resurshantering, Felhantering Sven Gestegård Robertz Datavetenskap, LTH 2016 1 Resurshantering Stack-allokering Heap-allokering: new och delete 2 Felhantering Exceptions
Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)
Innehåll EDAF30 Programmering i C++ 7. Felhantering. Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Felhantering Exceptions Exceptions och resurshantering Specifikation av exceptionella händelser Static
Algoritmer och datastrukturer 2012, föreläsning 6
lgoritmer och datastrukturer 2012, föreläsning 6 Nu lämnar vi listorna och kommer till nästa datastruktur i kursen: träd. Här nedan är ett exempel på ett träd: Båge Rot De rosa noderna är ett exempel på
public boolean containskey(string key) { return search(key, head)!= null; }
Tentamen Programmeringsteknik II 2009-05-26 med lösningar Skrivtid: 0900-1200 Uppgifter 1. Programbilagan ListMap.java innehåller en klass som implementerar en avbildning mellan mängden strängar och mängden
Tentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26
Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623
Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar
Innehåll EDAF30 Programmering i C++ 3. Mer om klasser. Funktionsanrop Sven Gestegård Robertz Datavetenskap, LTH 2017 1 Klasser pekaren this const för objekt och medlemmar Kopiering friend inline 2 Funktionsanrop
Föreläsning 7. Träd och binära sökträd
Föreläsning 7 Träd och binära sökträd Föreläsning 7 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Läsanvisningar och
C++ Objektorientering - Klasser. Eric Elfving
C++ Objektorientering - Klasser Eric Elfving 1 / 20 Återblick struct struct är bra att ha för att skapa aggregat - slå ihop flera data till en ny datatyp. Ett problem med struct är åtkomst... 2 / 20 Följande
Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två
Binära träd Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två gånger, talar man om binära träd. Sådana
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något
Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010
Programsystemkonstruktion med C++: Övning 2 Karl Palmskog palmskog@kth.se september 2010 Specalfunktioner i klasser Konstruktorer i konstruktorerna för en klass initieras klassens medlemmar initialvärden
Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (type casts) Explicita, namngivna typomvandlingar (C++-11)
Innehåll EDAF30 Programmering i C++ 8. Typomvandlingar. Klasser: operatorer och polymorfism. 1 Typomvandlingar Sven Gestegård Robertz Datavetenskap, LTH 2017 2 Klasser Operatorer 3 Polymorfism och arv
Länkade strukturer, parametriserade typer och undantag
Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer
Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning
Föreläsning 5 Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning Terminologi - träd Ett träd i datalogi består av en rotnod
Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!
Tentamen Programmeringsteknik II 2013-10-22 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
Polymorfi. Objektorienterad och komponentbaserad programmering
Polymorfi Objektorienterad och komponentbaserad programmering Polymorfi, mångtydighet Polymorfi innebär att en viss konstruktion kan exekveras på olika sätt Överlagring av metoder ger ett polymorft beteende
Kommentarer till Person
TDDC76 PoD OH Föreläsning C++ 97 Härledda klasser TDDC76 PoD OH Föreläsning C++ 98 --Manager-Consultant en polymorf klasshierarki C++ har en relativt komplett och därmed komplicerad modell för härledning/arv
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Innehåll. 1 Funktionsmalllar. 2 Klassmallar. struct Name { string s; //... }; const Name & minimum ( const Name & a, const Name & b) { if(a.s < b.
Innehåll EDAF30 Programmering i C++ Generisk programmering med templates (mallar) Sven Gestegård Robertz Datavetenskap, LTH 2015 1 Funktionsmalllar 2 Generisk programmering med templates (mallar) 2/1 Generisk
Träd. Ett träd kan se ut på detta sätt:
Träd En lista är en struktur som är enkel att hantera men som inte är så effektiv ur söksynpunkt. Att leta efter en viss nod i en lista med n noder kommer i genomsnitt att kräva n/2 jämförelser. Detta
Tentamen Datastrukturer (DAT036)
Tentamen Datastrukturer (DAT036) Datum och tid för tentamen: 2013-12-16, 14:00 18:00. Ansvarig: Nils Anders Danielsson. Nås på 0700 620 602 eller anknytning 1680. Besöker tentamenssalarna ca 15:00 och
Föreläsning Datastrukturer (DAT036)
Föreläsning Datastrukturer (DAT036) Nils Anders Danielsson 2012-11-05 Repetition Förra gången: Listor, stackar, köer. Länkade listor, pekarjonglering. Idag: Cirkulära arrayer. Dynamiska arrayer. Amorterad
5 Arv och dynamisk bindning FIGUR
5 Arv och dynamisk bindning Arv är en av hörnstenarna i objektorienterad programmering. Med hjälp av arv kan man skapa underhållsvänliga och förändringsvänliga system. Att hitta arvsrelationer är en viktig
Övriga byggstenar. Övriga byggstenar. Några tips under programutveckling. Beroenden Pekare till funktioner Typkonvertering
Övriga byggstenar Beroenden Pekare till funktioner Övriga byggstenar Beroenden er Definitioners synlighet Funktionspekare Icke-medlemsfunktioner Medlemsfunktioner 2D1387 Programsystemkonstruktion med C++
Tentamen EDAF30 Programmering i C++
LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen EDAF30 Programmering i C++ 2016 01 11, 8.00 13.00 Hjälpmedel: En valfri C++-bok. OH-bilderna från föreläsningarna är inte tillåtna.
Arv. Objektorienterad och komponentbaserad programmering
Arv Objektorienterad och komponentbaserad programmering Arv Regel nr 1: Ett objektorienterat språk ska tillåta inkapsling av data Regel nr 2: Ett objektorienterat språk ska tillåta arv Regel nr 3: Ett
TDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Lösningsförslag till exempeltenta 1
Lösningsförslag till exempeltenta 1 1 1. Beskriv hur binärsökning fungerar. Beskriv dess pseudokod och förklara så klart som möjligt hur den fungerar. 2 Uppgift 1 - Lösning Huvudidé: - Titta på datan i
Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning:
2D1387, Programsystemkonstruktion med C++ 00/01 1 Del3 Klassanvändning, operatorer och pekare Ämnesområden denna föreläsning: Synlighet Överlagring av operatorer Slide 1 Vänner till klasser och funktioner
Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29
Programmering i C++ EDA623 Mallar EDA623 (Föreläsning 12) HT 2013 1 / 29 Mallar Innehåll Klassmallar Funktionsmallar EDA623 (Föreläsning 12) HT 2013 2 / 29 Containerklasserna vector, deque och list utgör
Operatoröverlagring. 1 Definition och deklaration av operatorfunktioner. 2 Anrop av operatorfunktioner
En operator är i princip en funktion. Den utför en beräkning grundat på sina argument och ger ett värde som resultat. Det som skiljer en operatorfunktion från en vanlig funktion är dess namn och hur den
Föreläsning 9 Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT07) Fredrik Lindblad 27 november 207 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/20/course/dat07 Innehåll 2
SP:PROG3 HT12 Tenta 2013-01-19
DSV SU/KTH sid 1 (5) SP:PROG3 SP:PROG3 HT12 Tenta 2013-01-19 Tentan består av tre uppgifter. Max poäng är 30. För betyget E (godkänd) krävs minst 18 poäng och minst en poäng på varje uppgift. Betygskriteria
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Sätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00
TENTAMEN CD5250 Objektorienterad programutveckling med C++, 5p Max poäng: 40 Betygsgränser: 3: 20 4: 28 5: 36 Datum: 1999-06-01, Tid: 14:00-19:00 Ansvarig: Ivica Crnkovic Upp till 5 poäng kan komma från
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng
Collections Collections "Envisa" objekt Klasserna Bofstream och Bifstream Definition av metoder i klasserna Bifstream och Bofstream Klassen Streng Klasser som skall bli "envisa" Klassen Anstelld skall
Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande
TDDC76 - Programmering och Datastrukturer
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
Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn
Träd allmänt Träd allmänt Ett generellt träd är Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn där t1,..., tn i sin tur är träd och kallas subträd, vars rotnoder kallas
Programmering A. Johan Eliasson johane@cs.umu.se
Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer
TDIU20 - Objektorienterad programmering i c++ - föreläsning 3
TDIU20 - Objektorienterad programmering i c++ - föreläsning 3 Pontus Haglund Department of Computer and information science 1 Vad har vi gjort hittills 2 Felhantering 3 Operatorer 4 binära operatorer 5