Wo "delete[]" setzten, wenn Array mit return aus Funktion übergeben werden soll + Exception notwendig?



  • Es ist ja nicht so, dass ich den Std-Container nicht verwenden will, sondern es verhält sich eher so, dass ich bis dato noch nicht weiß, wie man diesen Container benutzt.

    Die Standardcontainer sind bei weitem einfacher zu benutzen, als irgendwelches Array gefrikel. 😉 Sobald du dich ein wenig mit der Syntax angefreundet hast und weisst, was templates sind ist es eine enorme Erleichterung. Dazu kommt noch, dass, wenn du einen Container kennst praktisch alle anderen auch benutzen kannst. (gibt immer ein paar spezielle Sachen, aber das ist auch trivial).



  • Nur um mal einige Vorteile der STL-Container zu nennen:

    • Bequemes Einfügen und Löschen von Elementen.
    • Einfaches Durchiterieren und Ermitteln der Grösse möglich.
    • Speicherverwaltung wird einem abgenommen; Elemente werden automatisch zerstört, kopiert und zugewiesen, wenn benötigt.
    • Man hat ein Objekt vorliegen, während rohe Arrays oft wie Zeiger gehandhabt werden (z.B. Übergabe an Funktionen).
    • Je nach Anwendung sind andere Datenstrukturen (verkettete Liste, Binärbaum) besser geeignet als lineare Arrays.

    Als Einführung in die Standard Template Library gibt es hier im Forum gerade drei empfehlenswerte Artikel:
    1) Container
    2) Iteratoren und Algorithmen
    3) Hilfsklassen und Erweiterungen



  • Nexus schrieb:

    Nur um mal einige Vorteile der STL-Container zu nennen:

    • Bequemes Einfügen und Löschen von Elementen.
    • Einfaches Durchiterieren und Ermitteln der Grösse möglich.
    • Speicherverwaltung wird einem abgenommen; Elemente werden automatisch zerstört, kopiert und zugewiesen, wenn benötigt.
    • Man hat ein Objekt vorliegen, während rohe Arrays oft wie Zeiger gehandhabt werden (z.B. Übergabe an Funktionen).
    • Je nach Anwendung sind andere Datenstrukturen (verkettete Liste, Binärbaum) besser geeignet als lineare Arrays.

    ...

    • Einige Implementierungen bieten "range checking" - zumindestens an/abschaltbar - an.

    ... denn die Anlage von Arrays ist üblicherweise nur der erste Schritt - danach kommen üblicherweise die Threads "Warum schmiert mein Programm ab?". 😃

    Gruß,

    Simon2.



  • Simon2 schrieb:

    • Einige Implementierungen bieten "range checking" - zumindestens an/abschaltbar - an.

    Das ist sogar bei allen Implementierungen gegeben - wenn Du die Methode at() benutzt. 😃



  • Oder man debuggt halt wie jeder normale Mensch und stösst auf Assertions. 😉



  • Nexus schrieb:

    Oder man debuggt halt wie jeder normale Mensch und stösst auf Assertions. 😉

    😕
    Den Hinweis bekomme ich nicht mehr in den Diskussionszusammenhang: Ist dsas jetzt ein Argument für/gegen die Verwendung von STL-Containern oder at() oder operator[] oder ... ?
    Oder musst das einfach mal gesagt werden ? 😉

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Oder musst das einfach mal gesagt werden ? 😉

    Wohl am ehesten das. 🙂

    Das "normale Mensch" könnte falsch verstanden werden, da hast du Recht. Ich wollte nur darauf hinweisen, dass man gerade so gut im Debug-Modus auf Out-Of-Ranges prüfen kann.



  • Also auch wenn ich bei den letzten Aussagen nicht mehr ganz mitkomme, danke für euer Hilfe! Ich habe es heute geschafft mein Programm vollständig auf vector umzustellen und hab alle Pointer und Arrays rausgeschmissen und er rechnet mir immer noch richtige Werte aus. 🙂

    Ich werde zwar noch viel Übung brauchen, bis ich vollständig dahintergestiegen bin, aber es war ein guter Anfang. Hab auch überall at() benutzt. 🙂
    Ich hoffe damit speichermäßig nicht mehr auf Probleme zu stoßen.



  • Fruchti schrieb:

    er rechnet mir immer noch richtige Werte aus. 🙂

    oh? da ist wo noch nen fehler drin ; )



  • Nexus schrieb:

    Simon2 schrieb:

    Oder musst das einfach mal gesagt werden ? 😉

    Wohl am ehesten das. 🙂

    Das "normale Mensch" könnte falsch verstanden werden, da hast du Recht. Ich wollte nur darauf hinweisen, dass man gerade so gut im Debug-Modus auf Out-Of-Ranges prüfen kann.

    Ach so!!

    Danke,

    Simon2.


Anmelden zum Antworten