Frage zu Class & Object vs 2d vector



  • Hallo,

    mein erstes Projekt schreitet voran und ich bin inzwischen in der Lage ein Logfile zu parsen und am Ende das heraus zu bekommen was ich will.

    Wenn ich mir den Code jetzt aber anschaue bin ich nach der Unterdrückung des ersten Würgreflexes der Meinung das es auch schöner geht:

    -> Spaghetti-Code mit ein paar Funktionen
    -> Keine OO

    Die Frage die sich mir jetzt als Nicht-Informatiker stellt und die mir Google auch nicht beantworten konnte ist: Wann genau benutzt man 2d vectoren und wann nicht?

    Meinem Verständnis nach kann ich alles was ich in einem 2d Vektor abspeichere auch über Classen / Objekte abfackeln.

    Wäre toll wenn mich da jemand eine Antwort drauf hätte.

    Gruß
    Blacksheep



  • Blacksheep70 schrieb:

    Wann genau benutzt man 2d vectoren

    Wenn man sie benötigt.

    Blacksheep70 schrieb:

    und wann nicht?

    Wenn man sie nicht benötigt.

    Auch als Nicht-Imformatiker solltest du deine Fragen so stellen, dass sie verstanden und beantwortet werden können.



  • Mir ist ehrlich gesagt nicht ganz klar was du eigentlich wissen willst.

    Geht es Dir darum, wann man Objekt Orientierung einsetzt?

    Ein Vector ist auch eine Klasse/Objekt der einen bestimmten Typ hält und ich verstehe auch nicht was Du mit deiner Vector Aussage meinst.

    Es kommt immer darauf an was Du machen willst bzw. was dein Ziel ist und dann überlegst Du dir wie du es umsetzen willst.

    Nicht alles muss in einem Objekt gekapselt sein, freie Funktionen sind in C++ nicht das Werk Satans.

    Edit:
    Ein Vector ist im Grunde einfach nur eine Datenstruktur(Container) die Gewisse Daten in einem zusammenhängenden Speicherbereiche hält.
    Auf diese Daten kann direkt über [] oder über Random Access iteratoren zugegriffen werden.
    Es ist im Grunde eine Liste in der Daten (einfach) nur am Ende hinzugefügt und entfernt werden können. Z.b. Ein delete in der Mitte löst eine Umstrukturierung der Daten aus.

    Ist dir klar was ein Vektor ist? Hast du dir vielleicht auch andere Container Strukturen mal angeguckt und was sie für Fähigkeiten und Beschränkungen haben?
    Etc. map, multimap, verkettete Liste, set, etc.



  • Nicht wirklich einfach für einen Anfänger, aber ich formuliere die Frage mal anders:

    Welchen Vorteil kann es mir bringen Daten in einem 2d vector abzuspeichern anstatt Klassen/Objekte dafür zu benutzen?

    <selbskritik on>




    <selbstkritik off>

    Von meinem aktuellen Wissensstand her empfinde ich es einfacher eine Line von einem Textfile zu splitten und deren Inhalte einem Objekt einer Klasse zuzuweisen als ein 2d vector zu erstellen und zu füllen. Von der Lesbarkeit ganz zu schweigen.

    Mir ist auch klar das viele Wege nach Rom führen. Ich will allerdings nicht nur der Herde hinterher rennen und froh sein das mein Code läuft sondern ich will's verstehen und besser werden.

    Was mir nicht klar ist ob es Regeln (z.B. aus Perfromance- oder Memory Gründen) gibt wann man Daten besser in einem Objekt speichert oder wann man besser einen 2d vector benutzt.

    Für das Klassenobjekt würde sprechen das ich eine klare Struktur habe während ich bei einem 2d vector aufpassen muss was ich wo speichere.

    Doku und stackoverflow gibt ja viel her, leider kaum "Do's and dont's" bzw. "Best practices".



  • Mir ist nach wie vor dein Problem nicht klar.

    std::vector<T> ist eine Klasse und eine Instanz davon ist ein Objekt.



  • Blacksheep70 schrieb:

    Welchen Vorteil kann es mir bringen Daten in einem 2d vector abzuspeichern anstatt Klassen/Objekte dafür zu benutzen?

    Hier scheint es ein Verständigungsproblem zu geben... 😉
    Mir ist auch nicht so richtig klar, worauf du hinauswillst. Jedenfalls ist die Klasse vector einem eigenen Konstrukt vorzuziehen. Wozu das Rad neu erfinden?



  • Ich bin mir da ehrlich gesagt nicht sicher.
    Deine Frage impliziert irgendwie, dass du es nicht richtig weißt.

    Kannst Du mal ein detailliertes Beispiel geben?
    Denn ein Vector ist ein Objekt/Klasse.

    Was genau ist bei dir der Unterschied zwischen Daten in einem Vector speichern und Daten in einem Objekt/ äKlasse speichern.

    Bitte mit kurzem Codebeispiel damit jeder klar sehen kann was wirklich gemeint ist, denn ich glaube du bist noch auf einem Stand wo wir mit bloßen Begrifflichkeiten nicht weiter kommen.



  • Ich glaube gemeint ist hier eher ein

    vector<vector<T>> // 2D-Vector
    

    vs.

    vector<Data> // Vector mit eigener Datenstruktur
    


  • Ich bin mir auch nicht sicher, was Du meinst. Natürlich kann man Datenstrukturen in mehrdimensionale Vektoren ablegen.
    Aber ich glaube, Du bist schon auf dem besten Weg, wenn Du Dir überlegst Datenstrukturen zu typisieren. Dein Beispiel vom "Textfile" mit seinen "Lines" ist gar nicht so schlecht, sind beides Kandidaten für Klassen. Die Klasse "Textfile" könnte z.B. den Namen und einen Vektor mit den Objekten der Klasse "Line" besitzen. Die Zugriffe auf die Daten lässt Du nicht direkt, sondern nur über Funktionen zu. Also ein Plädoyer für die Klassen!
    Natürlich ist das besser zu begreifen wie ein 'vector' mit 'vectoren'. Deine Überlegungen zu 'Performance- oder Memory' halte ich für die meisten Fälle für überflüssig (außer Du hast definitiv zeitkritische Probleme).

    Gruß Helmut



  • Man kann es aber auch übertreiben.

    Um bei dem Textfile zu bleiben: wenn ich vector<string> lines; habe, ist doch wohl ziemlich klar, was das ist - und darum würde ich jetzt keine eigene Klasse "Line" basteln. Also ein Plädoyer dafür, es nicht zu übertreiben.

    Daher: will man die Ursprungsfrage ganz allgemein zu beantworten, kommt man wohl um ein "kommt darauf an" nicht herum.



  • Vielen Dank für eure Antworten. Ich habe nicht Verstanden das ein Vektor, sobald angelegt, eine Klasse ist und die Daten darin Objekte.

    Ich werde versuchen solche Fragen in Zukunft erst mal auszublenden sondern mich erstmal weiter mit den Basics und konkreten Beispielen befassen.


Log in to reply