mit 'new' weiteren Speicher anhängen
-
std::copy dient zum kopieren von Vektoren und eine for-Schleife ist mir zu langsam. Gibt`s da denn keine andere möglichkeit? Wie genau funktioniert das denn in der Klasse 'Vektor'? Die arbeitet doch intern auch mit Pointern oder?
-
LukasBanana schrieb:
std::copy dient zum kopieren von Vektoren und eine for-Schleife ist mir zu langsam. Gibt`s da denn keine andere möglichkeit? Wie genau funktioniert das denn in der Klasse 'Vektor'? Die arbeitet doch intern auch mit Pointern oder?
wieso zu langsam? wie hast du das gemessen?
wie willst du denn bitte ohne schleife x > 1 elemente von a nach b bewegen?
-
Naja, wenn man in einem Vektor über 10000 Werte gespeichert hat, dann ist eine solche for-Schleife nicht gerade schnell oder? Und Vektor ist meines Erachtens beim hinzufügen von Elementen shr schnell.
-
Kannst natürlich auch memcpy benutzen, wenn du denn das Geheule der "bloß kein C"-Fraktion ertragen kannst.
:p 
Und std::copy ist nicht nur für Vektoren. Geht auch für Arrays jeglichen Typs.
-
? Was soll an einer Schleife langsam sein? Nimm halt std::memcpy ... aber damit bekommst du Probleme ... von d.h. was spricht gegen std::copy?
wie denn dann? oder willst du nur darauf hinaus, dass std::vector evtl. mehr speicher als direkt benötigt wird reserviert?
korrekt!
-
LukasBanana schrieb:
Naja, wenn man in einem Vektor über 10000 Werte gespeichert hat, dann ist eine solche for-Schleife nicht gerade schnell oder? Und Vektor ist meines Erachtens beim hinzufügen von Elementen shr schnell.
Ja, weil vector auch nur ganz ganz selten kopiert. Der Speicher wird nämlich immer gleich verdoppelt wenn er ausgeht. Dadurch passiert es nicht allzu oft, dass er überhaupt ausgeht. Wenn's aber passiert, dann bezahlst du das auch.
-
Fellhuhn schrieb:
Kannst natürlich auch memcpy benutzen, wenn du denn das Geheule der "bloß kein C"-Fraktion ertragen kannst.

mit "geheule" meint unser freund hier wahrscheinlich die tatsache, dass memcpy nur für pod funktioniert und bei allem anderen jämmerlich verreckt.
das kann man natürlich ignorieren - wenn man dumm ist.
-
... oder es ausreicht.

-
(D)Evil schrieb:
wie denn dann? oder willst du nur darauf hinaus, dass std::vector evtl. mehr speicher als direkt benötigt wird reserviert?
korrekt!
dann verstehe ich deinen vehementen einspruch nicht.
-
LukasBanana schrieb:
Naja, wenn man in einem Vektor über 10000 Werte gespeichert hat, dann ist eine solche for-Schleife nicht gerade schnell oder? Und Vektor ist meines Erachtens beim hinzufügen von Elementen shr schnell.
da du keinen einfluss darauf hast, wo der von new gelieferte speicher liegt, MUSST du kopieren. es führt also kein weg an einer schleife vorbei.
du kannst dir natürlich mit memcpy in den fuß schießen wenn es dir spaß macht (tust du ja eh schon mit new und delete), aber auch memcpy wird den speicher in einer schleife kopieren.warum nimmst du nicht std::vector und ersparst dir eine menge aufwand und ärger?
-
Ich würde gerne einen Vektor verwenden, aber kann der mir von der aktuellen Liste auch einen Pointer geben?
-
Fellhuhn schrieb:
... oder es ausreicht.

na klar. in der bizarro-welt ist es natürlich vernünftig, sich grundlos von vornherein mit einer dämlichen funktion wie memcpy einzuschränken und später dann den gesamten code durchzugehen, wenn der datentyp in der deklaration sich plötzlich geändert hat und kein pod mehr ist.
-
Ja,
&(elem[0])Wozu brauchst du das denn?
-
LukasBanana schrieb:
Ich würde gerne einen Vektor verwenden, aber kann der mir von der aktuellen Liste auch einen Pointer geben?
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1463334.html#1463334
-
OpenGL ist nun mal in ANSI C geschribene und verlangt in einigen, durchaus wichtigen Funktionen, nach einem Pointer. In meinem Fall ist dies die Funktion 'glDrawElements'
Okay, wenn das geht nehme ich natürlich doch leiber Vektoren, die sind schließlich sher viel komfortabler.
Aber: ich brauche natürlcih einen Pointer der gesammten liste!
Z.B: float coords[100]; // in C++ vector<float>(100); << davon den Pointer?!
-
&(elem[0]) liefert dir einen Pointer auf das erste Element. Da im Standard gesichert ist, dass alle Elemente hintereinander stehen müssen, hast du zwangsläufig auch einen Pointer auf dein gesamtes Array.
-
Ahhhhhhhhhhhhhh, ........ tatsächlich. Danke

Ich glaube damit kann ich jetzt was anfangen
Danke an alle
