Kann ich einen std :: vector als Fassade für ein vorher zugeordnetes (rohes) Array verwenden?

8

Ich habe einen Speicherort von DirectX erhalten, in dem meine Eckpunktdaten gespeichert sind. Eine sehr bequeme Möglichkeit, mit Vertex-Informationen umzugehen, ist die Verwendung eines std :: vector & lt; & gt; einer Struktur, die Vertex-Informationen enthält.

Da ich einen Zeiger auf einen großen Puffer habe, könnte ich einen std :: Vektor verwenden, um die Elemente im Puffer zu verwalten? Das Konstruieren eines std :: vectors bewirkt regelmäßig, dass es eine eigene Adresse hat, was ich nicht wirklich will. Könnte ich irgendwie die Operatorplatzierung verwenden?

    
kvanberendonck 11.02.2013, 06:47
quelle

2 Antworten

7

Ja, du kannst. Verwenden Sie benutzerdefinierten Zuordner . In dieser Zuweisungsadresse des DirectX-Speichers.

Hier ist ein vollständiges Beispiel basierend auf einer Antwort von überzeugende Beispiele für benutzerdefinierte C ++ - STL-Zuordner? . Diese Lösung verwendet eine neue Platzierung im Zuordner.

%Vor%     
Yousf 11.02.2013, 14:09
quelle
0

Die Elemente von std::vector werden dynamisch auf dem Heap (mit new by std::vector selbst) so zugeordnet, dass sie im Speicher immer zusammenhängend sind. Wenn Ihre Struktur also vertex ist, ist die Verwendung von std::vector<vertex> nicht das, was Sie wollen, da die Elemente des Vektors nicht in Ihrem großen Puffer liegen.

Sie könnten jedoch std::vector<vertex*> verwenden, wie zum Beispiel:

%Vor%     
Aurelien 11.02.2013 06:59
quelle

Tags und Links