Versändnisfrage: Vektoren



  • Hallo Forum,

    hab mal ne Frage:
    Bei Vektoren ist es ja prinzipiell so, dass die Daten in einem Array abgespeichert werden (sprich linear auf dem stack liegen).
    Meine Frage: werden nur die iteratoren oder die kompletten daten linear abgespeichert?



  • AFAIK garantiert der Standard, dass die Elemente eines vectors in einem zusammenhängenden Speicherbereich abgelegt werden. Diesen kannst du über &dein_vektor[0] adressieren. Deine eigentliche Frage verstehe ich aber nicht 😉



  • daersc schrieb:

    Hallo Forum

    Hallo daersc 🙂

    daersc schrieb:

    (sprich linear auf dem stack liegen).

    oder im heap.

    daersc schrieb:

    werden nur die iteratoren oder die kompletten daten linear abgespeichert?

    nur der inhalt. ein iterator ist einfach irgentein objekt, meist auf dem stack
    (muss aber nicht) dass auf deine daten zeigt. die iteratoren werden erst beim
    aufruf von begin() oder end() erzeugt und von der klasse vector selber nicht
    gespeichert



  • die frage kommt daher:
    nehmen wir an, ich habe einen vector einer sehr großen klasse.
    wenn die elemente alle am stück gespeichert werden sollen, muss doch ein umso größerer speicherbereich angefordert werden.
    wären nur die iteratoren am stück gespeichert und die daten völlig variabel, dann gäbe es wahrscheinlich geringere probleme mit dem anfordern großer speicherbereiche oder?


  • Administrator

    helferlein schrieb:

    daersc schrieb:

    (sprich linear auf dem stack liegen).

    oder im heap.

    Normalerweise mit dem Defaultallokator befinden sich die Objekte in einem std::vector auf dem Heap, ohne wenn und aber 😉

    @daersc,
    Ein Iterator ist nichts anderes als ein Verweis auf ein Element. Gerade bei einem std::vector wird dazu meistens ein Zeiger genommen. Die Iterator-Objekte befinden sich deshalb meistens auf dem Stack und werden auch erst erzeugt, wenn man sie braucht.

    Grüssli


  • Administrator

    daersc schrieb:

    wenn die elemente alle am stück gespeichert werden sollen, muss doch ein umso größerer speicherbereich angefordert werden.

    Das ist auch der Sinn von einem std::vector .

    daersc schrieb:

    wären nur die iteratoren am stück gespeichert und die daten völlig variabel, dann gäbe es wahrscheinlich geringere probleme mit dem anfordern großer speicherbereiche oder?

    Dies wäre dann eher eine std::list oder vielleicht als Zwischenlösung die std::deque .
    Die Objekte sind zwar bei beiden auch auf dem Heap, aber der Speicher ist nicht am Stück. Die Objekte werden zusammengehängt.

    *Sorry für Doppelpost*

    Grüssli



  • danke 🙂
    hätt ja sein können...

    damit hätt sich meine frage auch erübrigt 🙂


Log in to reply