Zum Inhalt springen
L

Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).

[TheNilsor] - Informatik - Eigene Liste

TheNilsor39:23 118 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 268 Zeilen
Herunterladen
  1. hallo Youtube heute wollen wir uns eine eigene Liste anschauen und das soll uns ein bisschen dabei helfen zu verstehen wie ein Container funktioniert und
  2. eigentlich hatte ich überlegt dass ich ein bisschen so live programmieren mache dann ist mir aber aufgefallen dass das verdammt lange dauern würde ihr werdet
  3. gleich sehen warum das so lange dauern würde deswegen werden wir heute nur einen kurzen Teil anfangen und dann werden wir mal einen vorgeschriebenen
  4. teil uns anschauen wir werden uns jetzt eine Liste bauen auf die man nur relativ wenige Funktionen hat das heißt eine Class List werden wir uns
  5. aufbauen und dann mal gucken wie weit wir damit kommen natürlich wollen wir dass unsere Liste für alle möglichen Typen funktioniert deswegen machen wir
  6. einen Template hier mit ein type Name type den ich gerne benutze um zu sagen das hier ist ein bestimmter Typ den ich haben will und dann können wir mal
  7. anfangen uns zu überlegen was eine Liste brauchen könnte und die meisten Listen oder manche Listen oder viele Listen werden programmiert indem man hier nicht
  8. ein dynamisches Array aufbaut sondern etwas anderes und zwar einzelne Elemente die aufeinander zeigen und ich werde gleich noch sagen
  9. warum wie sieht das dann aus wenn Elemente aufeinander zeigen na ja wir haben hier ein anfangselement das dann in der Liste irgendwie drin steht wo das
  10. anfangselement ist und jedes weitere Element hat einen Zeiger auf das nächste Element wenn eine Liste so sogenannt doppelt gebunden ist dann auch auf das
  11. vorherige Element in diesem Fall bei unserer Liste wird es immer nur das nächste Element sein und dann kann man sozusagen durch die einzelnen Elemente
  12. durcheren durch die einzelnen Elemente durchgehen indem man dann dieser zeigerspur hier vorne folgt ins erste reingeht dann das nächste dann das
  13. nächste dann das nächste dann das nächste und so weiter bis man irgendwann auf den Null poointer stößt das ist der Pointer der hier nirgendswoin zeigt das
  14. ist dann der womit signalisiert wird das ist das letzte Element in jedem einzelnen Element steht dann noch ein Wert drin oder ein value V der hier
  15. vorne das Element charakterisiert und es hat ein Point auf das nächste Element insgesamt könnte man dann noch sowas machen wie z.B die Gesamtgröße uns
  16. ausgeben lassen und so weiter das werden wir uns aber gleich erst anschauen in einem anderen Beispiel in unserem Beispiel wird unsere Liste etwas
  17. einfacher sein und wir benutzen dazu jetzt einfach mal ein Struct anstatt ein eigene Klasse eine innere Klasse könnten wir natürlich auch benutzen ich benutze
  18. ja mal ein inneres struct das heißt ein Struct aus einem ein Struct das heißt Element und das besitzt generell ein value und zwar vom Typen Typ wir wissen
  19. ja gar nicht welchen Typ das hat und das heißt es hat ein type V das kann ein in V sein das kann double V sein oder was immer wir dort angesetzt haben und dann
  20. haben wir zusätzlich zu dem type V noch ein elementpinter auf das nächste Element das heißt hier noch ein Element Pointer der heißt dann next das heißt im
  21. Typ V elementpinter next sind wir schon ganz gut bedient für unser struct Element und jetzt brauchen wir noch ein Element Pointer first für unsere Liste
  22. im generellen das heißt das hier ist sozusagen der Anfang der meisten Listen die es gibt warum bauen wir hier nicht einfach irgendein dynamisches Array auf
  23. wie wir sonst immer gemacht haben na ja das geht natürlich auch das Problem dabei ist dass dynamische AR dann zu reallozieren oder zu vergrößern das ist
  24. dann wieder eine ganz ganz schwierige Sache ein dynamisches Array was schon aufgebaut ist vergrößern ist eine relativ schwierige Sache deswegen was
  25. leichter ist ist einfach hier noch ein Element neu dran zu hängen in diesem Fall eine relativ einfache Liste ohne Größe und dann gehen wir mal zum
  26. Konstruktor über der Konstruktor könnte ungefähr so aussehen natürlich können wir uns da verschiedene Konstruktoren ausdenken ich werde hier aber mal einen
  27. relativ simpel machen ich werde einfach sagen das erste Element soll gleich Null sein fertig und jetzt will ich natürlich irgendwie die Funktion haben da Glieder
  28. hinzuzufügen und da gibt es ganz viele Art und Weisen wir werden gleich noch ganz ganz viele Art und Weisen sehen wie man Glieder hinzufügen kann in diesem
  29. Fall werde ich aber eine ziemlich simple Art und Weise programmieren das heißt ich werde einfach eine Void ad hier vorne machen und die Void ad soll
  30. irgendwas bestimmtes machen wie addiert sie irgendwas na ja sie braucht erstmal irgendein Typen V hier vorne was dort reingespeichert wird oder ich mach's mal
  31. damit es nicht zu verwirrend wird mach nenne ich es mal t das heißt das T hier vorne soll in der Liste neu eingespeichert werden dieses Element das
  32. heißt wir müssen jetzt ein neues Element erstellen mit dem T hier vorne drin und dieses neue Element ist dann ein neues Element unserer Liste so noch mal ein
  33. bisschen verschoben und was wir jetzt machen wollen ist wir wollen ein neues Element konstruieren und worauf wir aufpassen müssen ist es kann sein dass
  34. wir hier vorne das erste Element hinzufügen das heißt erstmal müssen wir gucken if first == 0 das heißt wenn wir das erste Element hinzufügen wollen dann
  35. soll sollen wir hier first gleich new Element aufrufen das heißt dann geben wir auf das erste soll ein neues Element sein und dann können wir sagen na ja vom
  36. ersten Element wollen wir aber auch irgendwas machen das heißt beim Firsten beim ersten Element das ein Element Pointer das heißt die Dinger aus dem
  37. Element können wir hier mit dem diesem dererenzierungsoperator hier anfassen und dann sagen wir das das V vom ersten Element soll das T sein was wir uns
  38. eingegeben haben und dann sagen wir noch möglicherweise dass das nächste Element das next Element soll hier vorne auf Null gesetzt werden denn wir haben h
  39. gerade das letzte Element eingesetzt oder das erste was ja auch gleichzeitig letzte ist so jetzt das nächste ist die Frage wo geben wir das nächste Element
  40. überhaupt ein tun wir das vorne oder hinten rein und da werdet ihr gleich sehen dass es da mehrere Möglichkeiten gibt hier vorne werde ich mal die
  41. implementieren dass wir einfach sagen wir tun das als erstes neues Element rein das heißt hier wenn wir nicht das erste Element wenn das erste Element
  42. bereits besteht dann wollen wir hier vorne das als neues erstes Element reinfügen das ganze können wir uns mal anschauen das heißt wir haben hier vorne
  43. einen Pointer auf ein Element und das Element hier hat ein value und ein Pointer auf das nächste Element was dann hier ist so und da
  44. wollen wir jetzt noch eins dazwischen fügen das heißt was wir machen wollen ist wollen den Pointer hier vorne verändern auf ein neues Element das neue
  45. Element was wir mit dem neuen value V initialisieren und das neue Element braucht ein Pointer auf das was vorher das erste Element
  46. war mit seinem V das heißt wir müssen sowohl den Pointer hier vorne auf dieses Element hier vorne speichern als auch müssen wir ein Point
  47. auf das neue erste Element bringen und das Ganze kann ein bisschen schwierig sein was wir nämlich machen müssen ist müssen nämlich speichern was unser
  48. erstes Element ist das heißt wir haben jetzt ein Element Pointer das ist das hier den nenne ich ein mal das ist der nächste vom ersten das
  49. heißt next first ich den einfach mal und der speichert uns jetzt einfach mal das erste Element denn das erste Element wird ja
  50. gleich das zweite sein oder ich kann ja auch mal schreiben second das wird gleich das zweite sein und was wir dann machen ist wir sagen das erste soll
  51. jetzt ein neues Element seinement das heißt hier vorne verschieben wir den Zeiger der zuerst
  52. auf dieses Element gezeigt hat hier vorne auf ein neues Element und was wir dann beim neuen Element machen wollen ist wir wollen sagen der Value den wir
  53. da haben der soll gleich t sein und das nächste Element von diesem ersten Element was wir da neu erzeugt haben das soll jetzt gleich unser gespeicherter
  54. wert sein das heißt das alte erste Element das Interessante ist wir müssen hier nicht irgendwie was mit den anderen Elementen machen alle
  55. anderen Elemente sind noch komplett feine und brauchen gar kein Hilfe da muss man gar nichts machen das war's schon hier vorne das heißt jetzt können
  56. wir Elemente hinzufügen natürlich können wir das ganze auch kompilieren G+ asd.cpp und Kriegen ein paar Fehlermeldung was soll das denn jetzt na
  57. ja zum einen hier vorne instruct auch wenn es eine innere Klasse ist muss immer mit dem Punkt abgeschlossen werden aber das ist auch noch nicht alles seht
  58. ihr nachdem wir dann auch die klasse abgeschlossen haben übersetzt es hier wunderbar das heißt einfach aufpassen hier vorne Semikolon nach der Klasse ist
  59. immer etwas was man gerne vergisst und das vergesse auch ich sogar noch gerne was wir dann hier machen können ist z.B können eine List aus ins
  60. entwerfen die nennen wir l und die hier vorne benutzt gerade den Standardkonstruktor das heiß first wird auf Null gesetzt und dann können wir mal
  61. versuchen l.@4 dazu zu tun und l.@5 dazu zu tun und das können wir einfach mal ausprobieren g++ asd.cpp
  62. weil wir den Code geändert haben a Exel und zack ja man kann gar nicht sehen ja das ist ein bisschen doof was bräuchten wir denn um irgendwas zu sehen na ja
  63. vielleicht eine Methode die uns ausgibt was unsere Liste enthält das heißt Void print hier vorne ups das war nicht das was ich wollte so vo print soll uns
  64. einfach nur das ganze Ding ausgeben und dafür habe ich un schon i Stream inkludiert und den Namespace Standard hier benutzt ganz dre ein Mal generell
  65. das ganze benutzt so dann schauen wir uns an wie wir durch die Liste hier durchiterieren können das ist unser erster Versuch durch eine Liste
  66. durchzuerieren und was wir da machen können ist wir können sagen wir haben ein Element Pointer was das momentan Element ist current Element und der soll
  67. beim ersten Anfang first was er dann macht ist er soll das Element ausgeben jeweils das heißt in diesem Fall werde ich noch
  68. etwas vorschacheln eine wild Schleife und dann wird er jedes Mal wird einfach sagen C out und dann wird er den Wert davon ausgeben und zwar cur current
  69. Element und davon will er den Wert haben das istiß current Element Punkt oder dereferenziert als Zeiger V und dann am besten noch entline damit man sieht dass
  70. ist ein neues Ding und nicht dass noch das alte ist warum habe ich jetzt hier eine weilschleife eingebaut naja wir wollen das ja nicht nur einmal sondern
  71. so oft wie wir es brauchen in diesem Fall werde ich in die W Schleife reinschreiben das ist Coon Element dass der noch ein dass der nächste davon das
  72. heißt der Next vom current Element dass der nicht Null ist das heißt wenn der noch einen nächsten hat gibt er das aus und was macht er dann dann geht er zum
  73. nächsten current Element gleich current Element und next was mache ich hier das werde ich gleich noch sagen zum Schluss will ich noch einmal das current Element
  74. ausgeben das heißt da kopiere ich mir einfach diese Zeile hier vorne und zack Speicher das ganze dann übersetze ich das ganze asd.cpp a exe übersetzen und
  75. man sieht noch nichts weil ich die printmethode hier unten noch nicht hingesetzt habe dann sagen wir mal lprint probieren das jetzt mal aus g++
  76. asdasd.cb a.exe und wir sehen 5 und 4 wird ausgegeben und ich werde gleich noch sagen warum die 5 zuerst ausgegeben wird okay hier vorne der wichtige
  77. Schritt ist hier vorne die Iteration wie funktioniert diese Iteration na ja was machen wir was machen wir generell wir sagen zuerst einmal wir haben hier
  78. unsere wunderschöne Liste und ich werde noch mal eine neue Liste aufmalen von nur zwei Elementen damit wir das generell besser verstehen können da ist
  79. jeweils ein Wert drin und ein Zeiger auf das nächste oder vielleicht machen wir es auch ne mit zwei sollte es eigentlich reichen so und dann haben wir hier noch
  80. ein first Zeiger der hier drauf zeigt und unser current Element Zeiger geht jetzt zuerst einmal auf den First Zeiger das haben wir hier vorne gesagt current
  81. Element ist gleich first das heißt wir gehen zum ersten Element hin da starten wir sozusagen was sagt diese weilschleife dann dann sagt die wenn der
  82. Next Zeiger hiervon nicht der nullzeiger ist der Next Zeiger ist immer der hier BZ der hier das heißt wenn der Next Zeiger da der nullzeiger ist ist das
  83. selber das letzte Element was machen wir also wenn es nicht das letzte Element ist wenn es nicht das letzte Element ist geben wir
  84. das Element aus und gehen zum nächsten das heißt wir geben das Element aus hier V wird ausgegeben das mache ich vielleicht mal in pink oder so V wird
  85. ausgegeben und dann sagen wir unser Zeiger unser current Element Zeiger hier vorne soll der current Element next Zeiger sein das heißt der wird auf den
  86. next Zeiger gesetzt das heißt was wir da machen ist wir weisen einen Zeiger zu was demententspricht einem Zeiger zu verschieben das heißt wir verschieben
  87. Zeiger hier dass er diesem weiteren Zeiger hier vorne folgt BZ wir können das auch so einzeichnen wir verschieben den zu dem nächsten Element wenn das
  88. hier noch ein next Element haben würde würde es auch dort wieder verschoben werden in diesem Fall überprüfen wir wieder mit der Wild Schleife ob das das
  89. letzte ist in diesem Fall ist es das letzte wie schließen wir das Ganze ab wir geben noch einmal das letzte Element aus denn wir überprüfen ja ob das nicht
  90. das Letzte ist und in diesem Fall wollen dass es ausgegeben wird wenn es das Letzte ist das heißt hier vorne wenn es nicht das Letzte ist wird es ausgegeben
  91. und auch wenn es das Letzte ist wird ausgegeben aber nur wenn es nicht das Letzte ist geht man auch weiter das heißt haben wir nicht das letzte Element
  92. gib aus und geh weiter haben wir das letzte Element gib einfach nur aus und geh nicht weiter dadurch iterieren wir durch
  93. unsere gesamte elementenliste durch in diesem Fall müssen wir aber darauf aufpassen das hier vorne packt unsere Sachen immer
  94. vorne vor das heißt zuerst ist unsere Liste einfach nur ein Stück wo unsere vier hier vorne drin steht die wir reintun und dann tun wir noch eine fünf
  95. dazu die fünf wird aber nicht dahinter getan sondern davor und dann macht es natürlich auch Sinn wenn wir hier vorne haben dass unsere F und dann eine vi
  96. ausgegeben wird weil wir die Sachen immer davor tun das heißt wenn wir hier noch eine ein davor tun sollte die ein hier vorne zuerst ausgegeben werden und
  97. natürlich können wir uns auch das angucken das heißt g++ a d.cpp a.exel und dann wird die ein hier vorne vor ausgegeben das ist ja wunderschön jetzt
  98. brauchen wir eigentlich nur noch eine Funktion um das ganze hier zu löschen weil wir das nicht den Standard Destruktor überlassen wollen das heißt
  99. ich mache hier auch noch mal eine Void delete hin oder eine Void Pop wird das auch oft genannt und die Void Pop soll nichts anderes machen als das erste
  100. Element zu löschen natürlich wollen wir dann den Zeiger first auf das nächste Element zeigen lassen das heißt auch hier müssen
  101. wir wieder das ganze zwischenpeichern das heißt hier vorne bauen wir uns ein Element Pointer next auf und der zeigt jetzt darauf wo das erste hinzeigt das
  102. heißt unser momentanes erstes Objekt davon nehmen wir den next Zeiger und gucken wo der hinzeigt das Speichern wir uns ein das heißt ich mal das noch mal
  103. auf wir haben ja ein momentanes Objekt das zeigt auf irgendein anderes Objekt und wir speichern uns jetzt ein wo dieses Objekt hinzeigt das hier ist
  104. unser first Zeiger der gelbe hier und das blaue speichern wir uns gerade ein denn wenn wir das hier löschen wollen dann wird der blaue unser neuer first
  105. Zeiger das heißt was wir jetzt noch machen müssen ist dieses Element hier vorne löschen und den First Zeiger verschieben das heißt das machen wir
  106. jetzt das heißt wir machen jetzt ein delete löschen ein Element und zwar welches Element wollen wir löschen das erste Element was wir hier haben was wir
  107. danach machen wollen ist aber wollen dass der First Zeiger nicht ein nullzeiger wird sondern wir wollen dass der First Zeiger nun hier hier vorne
  108. drauf zeigt auf unser nächstes Element das heißt der soll jetzt auf das nächste Element zeigen das heißt indem wir diese Syntax hier vorne benutzen sollte das
  109. erste Element gelöscht werden das heißt l.pp sollte das erste Element löschen und wir können das durch l.print noch mal überprüfen ob das alles gut gegangen
  110. ist das heißt g++ asd. C g++ asd.cpp a. Exel und dann sehen wir das ganze wird noch mal ausgegeben mit einer 5 und ein VI die ein hier vorne wurde
  111. weggepoppt das heißt wir können natürlich auch sowas wie Void erase jetzt erstellen und dort können wir sagen weil das während das noch nicht
  112. Null ist können wir hier Elemente löschen natürlich haben wir hier noch auf eine Sache nicht aufgepasst was ist wenn das das einzige Element ist und wir
  113. kein nächstes haben natürlich müssen wir das auch noch mal explizit behandeln das heißt if if first und
  114. next ich meine natürlich wenn das kein Element ist wenn das hier das wenn das nächste Null ist dann ist das hier Nullpointer dann wird hier das dieses
  115. Element gelöscht und das first wird auf Nullpointer gelöscht eigentlich genau das was wir haben aber was natürlich überprüfen wollte ist wenn first hier
  116. vorne schon weg ist das heißt wenn schon alle weg sind dann können wir nirgendswo hier vorne dereferenzieren oder so und was er dann machen soll wenn das erste
  117. schon Null ist dann brauch er natürlich nichts zu machen natürlich was man hier auch noch wunderschön machen kann ist bei sowas ein Bull zurückgeben und dann
  118. zurückgeben ob das schon ob wir schon alles gelöscht haben das heißt wenn wir alles gelöscht haben dann return er to und wenn wenn wir noch nicht alles
  119. gelöscht haben return FS das macht sowas wie die erase Funktion hier vorne sehr sehr viel einfacher das heißt wir können hier einfach schreiben while Pop und
  120. while nicht Pop natürlich und dann wird er einfach die ganze Zeit poppen bis wir irgendwann hier vorne alles gelöscht haben hier vorne ein true zurückgegeben
  121. wird und dann sollte die ganze Liste leer sein das können wir ausprobieren mit dem erase hier vorne und dann l.print und hier vorne sollte dann alles
  122. gelöscht wollen wir das ganze doch ausführen kommt hier eine ssame Fehlermeldung und das ganze funktioniert nicht mehr warum funktioniert es nicht
  123. mehr ziemlich einfach eigentlich hier vorne die printmethode weiß natürlich nicht dass das ganze Ding leer ist das heißt wir müssen überall wo wir
  124. irgendwas machen müssen wir überprüfen ob das Ding nicht vielleicht schon leer ist das heißt first le n0 oder wir setzen einen booen fest der sowas
  125. einspeichert was machen wir wenn das erste schon bereits Null ist das heißt wir nirgendwo einsteigen können eigentlich was machen wir dann na ja
  126. ziemlich simpel wir müssen da gar nichts ausgeben dann asd.cpp überprüfen noch mal a.xe und dann löscht er sich wieder was ist denn diesmal schief gelaufen was
  127. ich vergessen habe ist hier vorne diese LS Schleife hier vorne natürlich wollen wir nur das nächste Element löschen wenn das ganze nicht Null ist das heißt hier
  128. habe ich ein vergessen was ich noch hinzugefügt habe ist hier vorne eine Ausgabe dass sie schon leer ist damit wir sowas vielleicht noch auch
  129. ausgegeben haben damit da nicht einfach nichts ausgeben wird in diesem Fall sieht das ganze dann folgendermaßen aus ihr seht vielleicht schon ich habe es da
  130. überprüft Axe und wir sehen 14 dann noch mal die 54 hier vorne weil wir eins gepopt haben dann ausgedrückt haben und dann erasen wir das Ganze und
  131. drücken es aus wenn wir es erased haben dann ist das Ganze leer und dann drücken wir es aus und da steht dann ist empty oder ist leer das heißt so können wir
  132. uns eine eigene Liste erstellen und das ganze kann man auch übertreiben so kann man das ganze auch übertreiben ihr seht das habe ich jetzt ein bisschen länger
  133. programmiert hatte ich ein bisschen Freizeit ihr seht hier vorne include ich ein paar Sachen hier vorne dann habe ich eine eigene Exception class einmal eine
  134. out of bounce Exception falls ich versuche irgendwas Falsches zu das heißt falls ich versuche etwas anzusprechen was nicht innerhalb meiner
  135. Liste liegt und eine empty List Exception das heißt wenn ich versuche irgendwas mit einer leeren Liste zu machen was man damit nicht machen darf
  136. dann hier vorne seht ihr eine ganz normale class List hier vorne die hat eine Größe die merkt sie sich ihre eigene Größe merkt sie sich diese List
  137. hier vorne einfach nur eine schöne Sache dann gibt es ganz ganz viele verschiedene Funktionen z.B vorne eine get Funktion
  138. und und zwar von einem in was hier gemacht wird ist wir gehen so lange weiter bis wir hier vorne ähm bis wir hier vorne unser i auf Null
  139. gesetzt haben das heißt da ist dann z. eine F drin und wir gehen so lange bis zum nächsten Element bis hier vorne i = 0 ist das heißt dann sind wir bei
  140. hoffentlich beim fünften Element das interessante hier dran ist get hier vorne überprüft selber gar nicht auf den Nullpointer sondern das ist eine private
  141. Funktion die nur von einer öffentlichen Funktion benutzt wird und die öffentliche Funktion überprüft für diese private Funktion auf den Nullpointer das
  142. heißt hier vorne das i wird niemals einen Wert haben wo das ganze hier problematisch werden kann weil der Next poointer hier vorne Nullpointer ist und
  143. wir dann irgendwas versuchen mit dem Nullelement hier vorne zu machen das heißt das kann nicht passieren weil das get hier vorne vorher überprüft wird
  144. dann auch ein get read das genau das gleiche nur als Konstante Funktion das heißt ein getfunktion hier die nur lesen darf eine get Last Funktion die ein
  145. genau das gleiche macht wie unsere printfunktion nur dass sie nichts ausgibt sondern nur dann aufhört wenn wir sozusagen das letzte Element
  146. erreicht haben und dann hört sie einfach dauert auf und gibt das letzte Element aus auch hier wieder die Überprüfung ob das erste Element vielleicht Null ist
  147. weil wir sonst nicht dereferenzieren dürfen was wir hier vorne drin machen hier vorne da kriegen wir das Element vor dem letzten Element das kann man
  148. auch machen dann haben wir hier vorne das sind alles übgens noch priv fktion dann eine Funktion die das kleinste Element ausgibt die durchsucht dann das
  149. ganze Element hier vorne mit jeweils current Element da integriert sie also durch und hat dann auch ein lowest Element Pointer und das lowest Element
  150. wird zuerst mal auf das erste gesetzt außer wir haben noch ein kleineres wenn wir ein kleineres finden wird das auf dieses kleinere was wir gefunden haben
  151. gesetzt und das machen wir einfach die ganze Zeit und gucken dann hinter an was das kleinste ist das gleiche noch mal für das he ist dann ein eine vo um eine
  152. ganze Liste drauf zu tun die hier andere Funktion benutzt die wir gleich noch sehen werden dann ganz ganz ganz viel was ein bisschen komplizierter ist
  153. Suchalgorithmus den ich euch vielleicht irgendwann später erklären werde und danach hier vorne der normale Konstruktor der normale Destruktor der
  154. einfach die eras Funktion benutzt die ich voranders geschrieben habe dann ein den ich übrigens auch hier noch mal hätte einbauen sollen das habe ich da
  155. ein bisschen vermasselt dann haben wir hier noch mal ein eine Liste die hier vorne size GLE 1 gesetzt wird das heißt hier vorne mit
  156. einem initialelement kann man eine Liste aufbauen man kann eine Liste aufbauen mit einer anderen Liste das heißt das hier vorne ist der copy Konstruktor wie
  157. ihr euch vielleicht ändern werdet und hier ein Zuweisungsoperator und hier vorne ein Plus gleichoperator auch hier vorne der
  158. nichts anderes macht als die Sachen drauf zu addieren und dann das hier zu returnen ihr seht hier überall benutzt der Funktion wie oder erase einfach nur
  159. dafür gemacht dass das Ganze übersichtlicher wird was wir hier machen z.B ist nichts anderes als beim copykonstruktor setzen wir first = 0
  160. size = 0 und dann tun wir alle hinzu oder fügen wir alle Elemente hinzu was wir hier machen ist wir überprüfen auf selbstzuweisung Löschen unser Array wie
  161. wir es immer machen setzen die Größen gleich und dann haben wir hier diese vorschleife indem wir alle Daten dazu tun oder
  162. einfügen wenn ihr euch erinnert das ist eigentlich genau das gleiche was wir auch beim unserer eigenen vektorklasse oder anderen Klassen gemacht haben nur
  163. halt jetzt in Form von einer Liste anstatt einem dynamischen Array dann hier vorne haben wir dann eine plusgleichoperator der macht nichts
  164. anderes als zwei Listen zu addieren das ist nicht ganz so interessant dann hier die Funktion atlast die überall benutzt wird was sie macht ist die überprüft
  165. erstmal ob wir das erste Element haben wenn es das erste Element ist dann tut sie hier vorne tut sie das als neues erstes
  166. Element rein weil das dann das letzte Element ist das erste ist dann das letzte wenn gar kein Element vorhanden ist und sonst überprüft sie ob sie hier
  167. ein letztes finden kann wenn wenn sie ein letztes finden kann dann tut sie das hinten dran und sonst wirft sie eine empty List Exception die eigentlich
  168. theoretisch niemals geworfen werden dürfte weil weil wir immer ein get lastast finden soll
  169. wenn wir es nicht finden dann muss irgendwas kaputt sein und deswegen wird hier was geworfen dann hier vorne eine add first da wird was zuerst eingesetzt
  170. das heißt hier wird als erstes Element irgendwas eingesetzt dann after da kann man hinter irgendetwas etwas einsetzen vorne ein Ing si da kann man die Größe
  171. sich anschauen Pop first kann man das erste löschen Pop Last kann man das letzte löschen Pop an irgendeiner Stelle da kann man das an irgendeiner Stelle
  172. löschen hier wird auch wieder hier wird auch wieder guckt ob ich das Element an irgendeiner Stelle kriegen kann z.B hier get an einer Stelle und dann wird da
  173. wieder dieses ganze Zeug gemacht wo man ähm wo ich dann z.B sagen muss ja das das vorherige Element zeigt dann später auf das nächste das heißt das muss mir
  174. zwischen speichern und so weiter das heißt da gibt's ganz komplizierte Sachen wie man das machen kann aber hier seht ihr dann auch hier kann
  175. es auch eine out of bounce Exception thrown das passiert wenn der int hier vorne falsch ist das heißt wenn wir ein Element versuchen zu löschen was gar
  176. nicht in unserem Ding drin ist und dann haben wir so Sachen wie z.B erase da wird das ganze Ding gelöscht das heißt hier vorne poppen wir die
  177. ganze Zeit das Last weil size größer als Null ist habe ich das hier gemacht natürlich hätte ich hier auch machen können while first leich Null so wie ich
  178. das vorhin gemacht habe oder ich hätte poplast ein boolean returnen können alles wäre möglich gewesen Phil füllt unser ganzes Ding und dann
  179. oder löscht das ganze Ding und dann tut es was hinten dran pend tut einfach immer irgendwas hinten dran pend tut was vorne dran pend in tut tut was
  180. zwischendurch dran dann kann man zwei Sachen addieren man kann eine Liste hier vorne removen also Teile aus einer Liste removen man kann Elemente zählen man
  181. kann Elemente finden man kann Elemente dereferenzieren man kann Elemente dereferenzieren auf eine sichere Art und Weise die auf jeden Fall überprüft ob
  182. das Element den überhaupt dereferenziert werden kann und sonst wirft sie eine Exception die man fangen darf kann will dann kann genau das gleiche noch mal nur
  183. als lesen und zwar diesmal wieder mit konstanten Sachen dann sortieren das ganze hier ist der soltieralgorithmus der relativ schwer ist das Bubble sort
  184. was oder Quicksort habe ich glaube ich gemacht ja steht sogar da quick sort habe ich genommen dann kann man das höchste das kleinste Element kriegen man
  185. kann die ausgeben und man kann die mit einer anderen Liste austauschen das heißt sehr sehr sehr sehr sehr viel Funktionalität für unsere kleine Liste
  186. die ich hier vorne aufgeschrieben habe und wir schauen uns einfach mal an was ich dann damit machen kann und hier vorne habe ich einfach mal ein paar
  187. Segmente gemacht und wir überprüfen einfach mal ein paar dieser Funktionen das heißt add Last F after und wir schauen uns ein mal an was dann jeweils
  188. passiert das heißt CLS g++ list.cpp habe ich das drin gespeichert a Exel übrigens was ich hier gemacht habe würde man normalerweise mit einem Header machen
  189. aber Header haben wir noch nicht besprochen header files deswegen hier ohne Header File äh was wir dann sehen ist hier vorne die Größe wird ausgegeben
  190. size 4 sozusagen und da warum wird die ausgegeben na ja weil wir hier ein paar Sachen hinzufügen und dann will ich die Größe ausgeben das ist in diesem Fall
  191. haben wir ein startelement dann haben wir ein letztes Element ein erstes Element und eins ein nachfolgendes Element reingetan in diesem Fall sehen
  192. wir dann hier vorne die einzelnen Elemente hier vorne die die die wird noch nicht ausgeben aber ih Größe danach wird das letzte
  193. Element gelöscht das ist dann hier vorne die sech die hier vorne gelöscht wird die alle anderen Elemente werden davor eingesetzt und danach haben wir noch 4
  194. 35 als Elemente dann wird noch mal das letzte gelöscht dann sehen wir hier vorne ist auch wirklich das Letzte hier vorne wird die fünf das das ste Element
  195. das wird hier gelöscht machen wir das ganze noch mal noch mal noch mal und was auch ganz interessant ist egal ob wir was was Pop lastast auch noch überprüft
  196. ist auch ob wir schon fertig sind das heißt wenn die Größe Null ist wie hier vorne und wir noch mal Pop l ausführen ist das alles kein Problem er weiß ich
  197. habe hier keine Elemente mehr und kann da sozusagen nichts löschen das heißt da ist er ein bisschen vorteilhaft da muss er dann nicht irgendwie eine empt List
  198. Exception oder so thrown weil er das vorher überprüft was natürlich relativ schlau ist dann können wir hier Sachen hinzufügen als erstes z.B hinzufügen
  199. dann erste Sachen wieder löschen das ist einfach nur Funktionalität die wir ausprobieren hier vorne fügen wir eine vier zu dann fügen eine dre davor zu und
  200. dann löschen wir die ersten elementente hier vorne das heißt die dre wird wieder zuerst gelöscht und dann die vier hier vorne auch wieder wird überprüft ob wir
  201. vielleicht eine Größe von Null haben und was dann noch das letzte add ist ist add after da können wir das an einer bestimmten Stelle einfügen das heißt ihr
  202. seht dann ihr seht dann hier vorne geben wir die dre ein an der Stelle 0 dann geen wir die 2 ein an der Stelle 0 das heißt immer nach dem
  203. Element das die 3 ist vor das nullte Element das heißt nach dem Nullen Element was hier die 3 ist geben wir das ein und die ein geen wir nach dem ersten
  204. Element ein das erste Element ist hier vorne die 2 das heißt nach dem ersten Element nach der Z wird das hier vorne eingegeben wenn wir hier die Werte
  205. verändern würden würden wir natürlich auch was hier vorne steht verändern in diesem Falle ganz interessant auch noch add after für null wenn noch keins da
  206. ist muss das das auch überprüfen weil sonst würde es das versuchen das nach dem ersten Element nach dem nullten Element hier vorne einzu legen obwohl
  207. gar kein nulltes Element da ist das heißt da wird er noch mal explizit überprüft ist meine Liste vielleicht gerade leer und wenn der so ist dann
  208. wird hier nicht das nullte Element genommen sondern wird einfach das first Element hier vor neu initialisiert was wir dann hier vorne
  209. machen ist auch ganz interessant wir überprüfen hier unsere Operatoren l von 2++ L Plus+ und L von 2 falls ich mich jetzt richtig erinere hatte ich hier
  210. sogar mal read Operator eingebaut den ich hier sozusagen auch mal überprüfen könnte nein ich wollte list.cpp machen so da sehen wir jetzt alle drei
  211. Operatoren l von 2 wenn ich hier vorne vier mache dann stürzt mein Programm einfach ab falls weil meine Liste sozusagen zu klein ist wenn ich hier
  212. eine vier reinue kriege ich eine out of bounce Exception die ich fangen und damit auch händeln kann wenn ich hier eine vier rein tu dann kriege ich auch
  213. eine out of bound Exception zurück das heißt add ist der sichere Methode die ein bisschen länger dauert und read ist die sichere Methode die sogar zusätzlich
  214. noch kanst ist das heißt dort wird der Wert niemals verändert werden das heißt wenn ich hier ein plus plus hinterschreibe wird würde es nicht
  215. funktionieren was ich dann noch hier zugebaut habe ist das Pop mit einem bestimmten in das heißt hier können wir Werte an verstimmten Stellen poppen das
  216. heißt in diesem Fall poppen wir zuerst den nullten wert das heißt die drei hier vorne dann poppen wir den ersten von dieser Liste hier unten das ist nicht
  217. die n die zwei das das wäre h der nullte sondern die ein hier vorne das heißt hier vorne wird diese drei gelöscht und danach löschen wir noch mal die zwei
  218. hier vorne und das ist sozusagen unser erstes Segment ganz interessant auch Pop hier vorne überprüft ähm überprüft ob wir innerhalb unseres
  219. Bereiches sind und sonst gibt uns das eine Exception aus ich kann natürlich euch das mal zeigen was dann passiert das heißt ich mache das mal eben wieder
  220. möglich und dann mache ich ein mal hier eine Exception rein das heißt da sollte jetzt eine
  221. Exception geworfen werdenchuldigung cppe und wir sehen hier vorne in 1 das war der Wert den wir Abfragen wollten out of bounce
  222. das ist unsere bounce von unserer momentanen Liste unsere Liste ist ull groß das heißt sie fängt bei Null an und geht bis null das heißt da vorne haben
  223. wir dann ein out of bounce Exception wenn ich hier wieder Null einfüge geht das ganze wieder das weil Null zwischen 0 und 0 liegt list. CPP a. Exel und das
  224. ganze funktioniert wieder wunderbar schauen wir uns mal das nächste Segment an das nächste Segment ist das was hier drunter liegt das nächste Segment dort
  225. haben wir Funktionen wie at first und so weiters Entschuldigung g++ list.cp CPP a.exe und hier haben wir Funktion wie at first erase fill und was
  226. hier gemacht wird ist z.B wir können hier vorne was vorsetzen wir können hier was löschen wir können hier was auffüllen wir können hier etwas hinten
  227. dran hängen wir können hier etwas vorne dran hängen wir können hier etwas zwischendurch dran hängen wir können hier Teile löschen die wir uns
  228. spezialisieren und das ganze sieht dann so aus dass wir dann hier vorne setzen wir ein paar Teile hin dann erasen wir das dann ist die Größe
  229. Null dann füllen wir das mit vieren und zwar drei Stück dann füllen wir das mit drei und zwar zwei Stück dann tun wir zwei Vieren hinten dran dann setzen wir
  230. zwei Fünfen vorne dran dann tun wir 3 Nullen hinten dran auf l. get he -1 das ist die Position die ist in diesem Fall das Ende und dann löschen wir die
  231. letzten die ersten fünf Sachen dann löschen wir zwischen die nächsten vier Sachen hier vorne drei Sachen Entschuldigung und dann löschen wir noch
  232. mal das Ding hier vorne und das war das zweite Segment seht schon die Segmente werden kürzer das letzte Segment oder das vorletzte ich glaube es ist das
  233. vorletzte ja es ist das vorletzte da machen wir Sachen mit auch anderen Listen denn hier können wir z.B zwei Listen miteinander swwappen wir können
  234. die die aufeinander addieren wir können hier vorne den Zuweisungsoperator den entschuldig die kopieroperator
  235. ausprobieren den plusgleich Operator den zuweisungs Operator und hier vorne das Feind was auch sehr sehr interessant ist die feindfunktion hier vorne ich
  236. übersetze das noch mal list.cpp a.xe was wir dann hier haben ist erstmal legen wir irgendeine Liste an indem wir hier einfach append benutzen unsere
  237. schöne append Funktion dann Swen wir ein bisschen rum dann addieren wir aufeinander haben wir vorne z.B Liste 5 22222 das ist weil wir hier vorne Z 5
  238. zweien addieren auf eine Liste in der SCH einer fün drin ist dann was wir dann hier machen ist wir addieren dann die Liste mit den Einsen auf die Liste mit
  239. der F und den zweien was wir dann hier machen ist hier weisen wir das Ding selbst zu deswegen passiert da nicht viel hier
  240. vorne addieren wir noch mal die Einsen drauf und hier vorne finden wir den ersten Wert die erste zwei hier vorne und erhöhen die um ein wenn ich da eine
  241. ein reintun würde würde dieser Wert erhöht werden wenn ich da eine F reintun würde W der andere Wert erhöht werden ich kann das mal eben zeigen und wie das
  242. gemacht wird auch hier wieder wir interiieren durch die Liste durch und ihr seht hier vorne da wird die fünf erhöht auf eine Sechs wir iterieren die
  243. Liste durch und wenn wir einen Wert oder wenn wir den Wert finden geben wir den Wert zurück und dann kann damit gearbeitet werden das heißt auch hier
  244. wir iterieren wieder durch die Liste nach dem listeninerationssverfahren was ich euch vorhin gezeigt habe und dann vergleichen wir immer die Werte mit
  245. diesem Vergleichswert den wir hier vorne haben haben dann auch interessant genau das gleiche noch mal nur geben wir dort nicht den verglichenen Wert zurück
  246. sondern wir erhöhen einfach nur eine Summe die irgendwo anders läuft in diesem Fall gucken wir uns an wie viele zweien hier vorne da sind das sind in
  247. diesem Fall 5 zien 1 2 3 4 5 zi haben wir auch richtig gezählt das könnten wir auch jetzt für die ein machen oder was auch immer oder für unsere eigenen
  248. Objekte das hier ist eine Klasse die ist mit einem Template geschrieben worden das heißt sie funktioniert auch für alle Objekte für die die einzelnen
  249. Operationen dieser Klasse hier vor definiert sind zu guter Letzt dann noch ach nee hier noch eins ach nee was ich hier vorne euch gar nicht gezeigt habe
  250. das höchste und das kleinste Element können wir uns ausgucken und zwar zwischen zwei bestimmten Reichweiten deswegen haben wir hier zweimal die ein
  251. vorne und nicht einmal eine ein und eine se dann zusätzlich vorne das letzte wenn wenn es wahr ist dann wir tun ja ein paar Sachen hin und dann sortieren wir
  252. das Ganze und das benutzt die Quicksort Algorithmus der ist ein bisschen schwieriger aber wir könnten uns das gerne auch angucken oh jetzt habe ich
  253. ausen das falsche übersetzt list.cpp wollte ich übersetzen a.xe und dann sehen wir hier vorne das ganze Ding wird hier sortiert bevor wir
  254. das Sortieren ist das ziemlich ungeordnet wie man es hier vielleicht sieht nachdem wir es sortieren ist das Ganze geordnet
  255. und zwar schön das das ist ein Sortieralgorithmus der funktioniert relativ schön hier vorne habe ich mal gemacht dass er das nicht ausdrücken
  256. soll wenn ich ihm schreibe dass er das ausdrücken soll das können wir uns jetzt noch als aller aller all aller letztes anschauen was passiert wenn ich das
  257. ausgebe dann seht ihr auch was dahinter der Kulisse passiert und ihr seht hier schon da passiert eigentlich ganz schön viel der teilt hier immer wieder Sachen
  258. hier vorne er teilt hier immer wieder Sachen in unterlisten ein hier vorne also bevor es sortiert wird dann teilt der Sachen in eine Liste ein wo weniger
  259. drin ist eine Liste wo mehr drin ist und dann Arbeit der mit den einzelnen Listen teilt die immer wieder auf in verschiedene Listen und dann irgendwann
  260. tut er die ganzen Listen zusammen und das hier vorne ist der erste Teil dann macht er es noch mal mit dem zweiten Teil und dann gibt er uns die gesamte
  261. Liste hier vorne auf das heißt da passiert dann schon ziemlich ziemlich viel es werden immer wieder kleinere Listen erstellt und dann
  262. hinterer werden die ganzen Listen zusammengepackt ich hoffe mal wirklich dass ich mit euch noch soweit komm dass ich euch auch diesen Algorithmus zeigen
  263. kann ähm im Programm sieht der suchalgor der der Sortieralgorithmus eigentlich relativ einfach auf der benutzt nur diese drei
  264. Sachen hier vorne diese drei Zeilen und generell macht er eigentlich nicht viel mehr als überprüfe nach Listen dann äh Teile das in äh unterlisten auf eine
  265. Liste mit mehr eine Liste mit weniger und dann hinterer tu die Listen in der richtigen Reihenfolge wieder zusammen und das ganze rekursiv und weil es
  266. rekursiv ist ist das ganze wunderschön wunderschnell und funktioniert auch ziemlich gut das soll's aber fürs heutige Video gewesen sein ich hoffe ihr
  267. ja euch ich hoffe mal ich hoffe mal euch hat das ganze gefallen ich hoffe mal auch mal wir sehen uns beim nächsten Mal wieder und
  268. ich hoffe mal ich habe euch jetzt nicht zu Tode gelangweilt wir sehen uns beim nächsten Mal wieder bis dahin wünsche ich euch noch Wunder viel Spaß tschüss

Zum Nachlesen