3 fragen



  • ähm Leute
    Ich brauch mal ne antwort auf 3 fragen

    1. diese vector-klasse aus der standart stl-bibliothek, ist die dynamisch oder statisch? mir gehts dabei darum, die zum speichern zu nehmen, also daten hizufügen und dann die komplette klasse spechern, also wächst die größe (sizeof) der klasse mit oder nur die pointer

    2. wenn 1. mitwächst ist, wie ist das ganze dann implementiert?

    3. kann man mittels template Typen definieren? konkret geht es mir dabei um eine template-klasse, die in einer funktion eine funktion ausführt deren pointer der eigentlichen fuktion übergeben wird. um die funktion, die ausgeführt werden soll, zu definieren, müsste ich einen speziellen typ definieren, und das variabel, mittels template



  • ??? o°O schrieb:

    1. diese vector-klasse aus der stan**** stl-bibliothek, ist die dynamisch oder statisch? mir gehts dabei darum, die zum speichern zu nehmen, also daten hizufügen und dann die komplette klasse spechern, also wächst die größe (sizeof) der klasse mit oder nur die pointer

    sie ist es, ja. mit der elementfunktion push_back(). aber ich empfehle dir hier eine liste ("list"), die kann neue einträge wesentlich schneller und besser aufnehmen (aufgrund ihres aufbaus)

    Details auf
    www.sgi.com/tech/stl/
    http://www.fredosaurus.com/notes-cpp/

    ??? o°O schrieb:

    2. wenn 1. mitwächst ist, wie ist das ganze dann implementiert?

    Entweder Cs realloc() oder ein new auf einen komplett neuen Speicherbereich.

    zu 3. ... probiers mal mit der library sigc++, aber sicher bin ich mir nicht.

    Greetz



  • Naja also den Quatsch würde ich jetzt nicht unbedingt glauben. Ein std::vector ist ein dynamischer Container, richtig. Es wird eine gewisser Abschnitt reserviert, wenn der voll ist, wird wieder neu speicher angefordert usw. Damit ist das hinzufügen im Schnitt äußerst schnell.

    zu 3.: Also direkt tyepdef's können nicht per Template gemacht werden bzw. man macht es so:

    template<typename T>
    struct data 
    { typedef T type; };
    

    ...



  • voidpointer schrieb:

    aber ich empfehle dir hier eine liste ("list"), die kann neue einträge wesentlich schneller und besser aufnehmen (aufgrund ihres aufbaus)

    Wenn du Elemente nicht am Ende einfügst, hast du Recht. Wenn ich aber nur Elemente anhänge (und vielleicht noch soviel Speicherplatz reserviert hab, wie ich wahrscheinlich brauch), ist ein vector um Längen schneller als ne list.



  • dachte, vectoren seien, wie für C++ üblich, mit new[] kreiert... gibt es ein realloc() für new[]? o_O



  • voidpointer schrieb:

    dachte, vectoren seien, wie für C++ üblich, mit new[] kreiert... gibt es ein realloc() für new[]? o_O

    Nö, gibts nicht.
    std::vector verwendet weder new noch realloc sondern den default allocator (std::allocator<>).
    Und std::allocator<> verwendet üblicherweise new.

    Und die ganze Diskussion hatten wir denke ich eben gerade vor ein paar Tagen.

    3. kann man mittels template Typen definieren? konkret geht es mir dabei um eine template-klasse, die in einer funktion eine funktion ausführt deren pointer der eigentlichen fuktion übergeben wird. um die funktion, die ausgeführt werden soll, zu definieren, müsste ich einen speziellen typ definieren, und das variabel, mittels template

    Also ich für meinen Teil habe keine Ahnung was das heissen soll. Geht das nochmal so auf Deutsch und verständlich und so?
    Oder schreib einfach was du damit machen/erreichen willst.

    FYI: Templates können Typen als Parameter nehmen, und "vollständig ausgefülle class templates" (wie nennt man das richtig? 🙂 ) SIND ein Typ wie jeder andere. Aber "Typen machen" ... keine Ahnung was du damit meinst.



  • ??? o°O schrieb:

    1. diese vector-klasse aus der stan**** stl-bibliothek, ist die dynamisch oder statisch? mir gehts dabei darum, die zum speichern zu nehmen, also daten hizufügen und dann die komplette klasse spechern, also wächst die größe (sizeof) der klasse mit oder nur die pointer

    Um den letzten Teil der Frage zu beantworten: Die Datengröße des Vectors wächst mit, wenn du Elemente einfügst. Die Größe (sizeof) des Containers bleibt unverändert (der besteht normalerweise aus einem Pointer und mindestens 2 int-Werten - alle übrigen Daten verwaltet er dynamisch).


Anmelden zum Antworten