std::vector oder Arrays?



  • Ne, der Ersatz ist std::array.



  • dot schrieb:

    Sone schrieb:

    Auch sollte imo noch std::unique_ptr erwähnt werden.

    boost::scoped_array 🤡

    Ich seh keinen Grund, sich wegen sowas eine Abhängigkeit wie boost einzuhandeln...

    Ach, jetzt komm. Wer hat schon nicht Boost in alle seiner Projekte eingebunden.

    , ich dachte std::vector ist sozusagen eine Ablösung für diesen normalen Array

    Nö, std::vector ist die "Ablösung" für new [] / delete [] .



  • Sone schrieb:

    dot schrieb:

    Sone schrieb:

    Auch sollte imo noch std::unique_ptr erwähnt werden.

    boost::scoped_array 🤡

    Ich seh keinen Grund, sich wegen sowas eine Abhängigkeit wie boost einzuhandeln...

    Ach, jetzt komm. Wer hat schon nicht Boost in alle seiner Projekte eingebunden.

    ich



  • ich



  • Na nun streitet euch doch nicht wegen Boost, soweit bin ich eh lange noch nicht 😃
    Bedanke mich für eure ausführliche Hilfe 😉



  • Kein boost hier.



  • dot schrieb:

    Sone schrieb:

    dot schrieb:

    Sone schrieb:

    Auch sollte imo noch std::unique_ptr erwähnt werden.

    boost::scoped_array 🤡

    Ich seh keinen Grund, sich wegen sowas eine Abhängigkeit wie boost einzuhandeln...

    Ach, jetzt komm. Wer hat schon nicht Boost in alle seiner Projekte eingebunden.

    ich

    und ich 😃

    Zumal ja nun shared_ptr und andere lustige Spielzeuge im Standard sind... 👍



  • Belli schrieb:

    Kein boost hier.

    Och, jetzt komm. 😃



  • hat einen Speicherleak, weil f eine Exception werfen könnte und dann array nicht freigegeben wird.

    Reine Mutmassung. Es hat erstmal kein Speicherleck, da keine Exception geworfen wird.



  • Anonymus42 schrieb:

    Hallo, bin am C++ lernen und lese häufig alle möglichen Threads hier, und mir ist aufgefallen, dass anstatt Arrays immer zu std::vector geraten wird. Wollte mir in meiner Lernphase als nächstes mal die Arrays anschauen, die ich auch aus Java etc. kenne, aber es wurde hier im Forum immer eher zu std::vector geraten.

    Die Arrays, die du aus Java kennst, gibt es in C++ nicht.

    Anonymus42 schrieb:

    - Welche Vor-/Nachteile hat std::vector und sollte man die "normalen" Arrays zuerst beherrschen, bevor man zu std::vector kommt?

    Hierzu könnte man mehrere Seiten schreiben.

    Anonymus42 schrieb:

    Was sind "normale Arrays"? Es gibt da mindestens zwei
    - Hat jemand eine gute Erklärung zur Funktionsweise von std::vector?

    Was sagt denn dein schlaues C++ Buch dazu?

    Anonymus42 schrieb:

    Mit "normale Arrays" meinte ich auch sowas wie

    int xyz[];
    int abc[3] = {1, 2, 3};
    

    .

    int[] ist kein vollständiger Typ. In Java wäre das eine Array-Referenz, in C++ gibt's sowas nicht. Und wenn du so etwas mal als Funktionsparametertyp siehst, dann ist das in Wirklichkeit int*, nicht int[]. Das ersetzt der Compiler in diesem Kontext einfach. Es ist also eigentlich egal, ob du int* oder int[] als Funktionsparametertyp schreibst. Allerdings könnte man damit dem Leser noch mitteilen, ob die Funktion nur auf ein Objekt zugreifen will, oder ggf auch auf mehrere, die hintereinander im Speicher liegen. So könnte man es als ein Teil der Funktions-"Dokumentation" ansehen.

    Das Array/Zeiger Thema wurde unendlich mal totdiskutiert. Bitte recherchiere das selbst, hol dir ein gutes Buch, schau in diverse FAQs rein. Danke.

    Übrigens: C++ ist eine komplett andere Sprache als Java. Versuche nicht einfach die Dinge, die du in Java schreiben würdest, nach C++ zu übertragen. Das ist genauso blöd wie Wort-für-Wort Übersetzungen von englischen Gedichten ins Deutsche. Da kommt einfach Murks bei raus.



  • Sone schrieb:

    , ich dachte std::vector ist sozusagen eine Ablösung für diesen normalen Array

    Nö, std::vector ist die "Ablösung" für new [] / delete [] .

    Imho ist das eher std::valarray oder eben dein heiß geliebtes dynarray, das es halt noch nicht im Standard gibt.
    std::vector ist ja mächtiger. (Obwohl der Name Anderes vermuten lässt, ein VeKtor bezeichnet ja eigentlich auch nur ein n-Tupel, genauso wie ein Array).



  • Ethon schrieb:

    Imho ist das eher std::valarray oder eben dein heiß geliebtes dynarray, das es halt noch nicht im Standard gibt.
    std::vector ist ja mächtiger.

    😕
    std::valarray is viel viel mächtiger als vector, der ist bloss ein dummes Array mit einer Hilfsfunktion, die ein neues Array allokieren kann und das alte rüberkopiert.



  • valeria schrieb:

    Ethon schrieb:

    Imho ist das eher std::valarray oder eben dein heiß geliebtes dynarray, das es halt noch nicht im Standard gibt.
    std::vector ist ja mächtiger.

    😕
    std::valarray is viel viel mächtiger als vector, der ist bloss ein dummes Array mit einer Hilfsfunktion, die ein neues Array allokieren kann und das alte rüberkopiert.

    Meinte nur um Bezug auf die Speicherung der Elemente. new[] kann nicht wachsen, std::vallarray auch nicht.
    Stimmt schon, std::dynarray ist eine Lücke, aber die kommt hoffentlich bald! (Auch wenn es mir eher um den dynamischen Stackspeicher als um die Vollständigkeit geht :p )



  • Kruemelkacken:

    Unter n-Tupel verstehe ich (A,B,C, ...), wobei A, B, C unterschiedliche Typen sein koennen, bei einem Array sieht es eher so aus: (A,A,A,...).

    Und std::dynarray habe ich noch nie wirklich vermisst.



  • Und std::dynarray habe ich noch nie wirklich vermisst.

    Fühl dich gerügt, mein Freund, fühl dich gerügt.

    Unter n-Tupel verstehe ich (A,B,C, ...)

    👍
    Ich würde statt Tupel, weil ich damit das gleich assoziiere wie Knivil,
    den Begriff Feld nehmen.

    P.S.: Kruemelkacken? Mal ganz schnell editieren 😃



  • Ein n-Vektor ist im mathematischen Sinne meistens ein n-Tupel aus Z/Q/R/C.
    Ein Array ist also ein Spezialfall eines Tuples, bei dem eben alle Elemente der gleichen Menge zugehörig sind.
    Finde es nicht falsch den Bezug zur Mathematik zu ziehen, da kommt ja alles her ...

    Jedenfalls ist vom Begriff her Array == Vector. Für mich unlogisch dass ein Vector wachsen und schrumpen kann. Aber was solls. 😉



  • Ein Array ist also ein Spezialfall eines Tuples, bei dem eben alle Elemente der gleichen Menge zugehörig sind.

    Eben weil Array ein Spezialfall ist, kann nicht das allgemeine Tupel als Begriff fuer die Beschreibung gebraucht werden, da es Tupel gibt, die keine Arrays sind.

    P.S.: Kruemelkacken? Mal ganz schnell editieren

    Ja, ist das Verb und steht am Anfang.



  • Ja, ist das Verb

    Das ist kein Verb (wo steht das im Duden?). Vielleicht kacken, aber das ist auch ein obszönes, durch entsprechende Euphemismen vermeidbares Verb, was hier nicht gebraucht werden sollte).



  • knivil schrieb:

    Ein Array ist also ein Spezialfall eines Tuples, bei dem eben alle Elemente der gleichen Menge zugehörig sind.

    Eben weil Array ein Spezialfall ist, kann nicht das allgemeine Tupel als Begriff fuer die Beschreibung gebraucht werden, da es Tupel gibt, die keine Arrays sind.

    Ein Array ist aber trotzdem ein Tuple. Und irgendwie ging es garnicht darum sondern darum dass vector ein irreführender Name für eine Datenstruktur mit dynamischer Größe ist. :p



  • Ich denke bei Feld eigentlich zuerst an Acker, dann an zweidimensionale Felder (Arrays) … Was aber nicht heißt, dass ich es gut finde, im Deutschen Array zu benutzen.
    Eigentlich war für mich immer ein anderer Begriff viel naheliegender: Liste.
    Eine Liste ist eine Aneinanderreihung gleicher Felder, die direkt hintereinander liegen. Also genau das, was ein Feld ist.
    Für den Begriff Liste wiederum würde ich Kette einsetzen, da die Elemente eben verkettet sind. (Wieso dieser Begriff (Liste) überhaupt verwendet wird, habe ich sowieso nie verstanden. Zumindest, falls nicht deshalb, da es im Englischen list heißt und das natürlich irgendjemand direkt übersetzen musste.)


Anmelden zum Antworten