Konvertieren zwischen C++ std::vector und C-Array ohne Kopieren

Konvertieren zwischen C++ std::vector und C-Array ohne Kopieren


Ich möchte in der Lage sein, zwischen std::vector und dem zugrunde liegenden C-Array int* zu konvertieren, ohne die Daten explizit zu kopieren.


Bietet std::vector Zugriff auf das zugrunde liegende C-Array? Ich suche so etwas


vector<int> v (4,100)
int* pv = v.c_array();

BEARBEITEN:


Ist es auch möglich, das Gegenteil zu tun, dh wie würde ich einen std::vector initialisieren? aus einem C-Array ohne Kopieren?


int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv);

Antworten:


Einen Zeiger auf das erste Element erhalten Sie wie folgt:


int* pv = &v[0];

Dieser Zeiger ist nur gültig, solange der Vektor nicht neu zugewiesen wird. Die Neuzuordnung erfolgt automatisch, wenn Sie mehr Elemente einfügen, als in die verbleibende Kapazität des Vektors passen (d. h. wenn v.size() + NumberOfNewElements > v.capacity() . Sie können v.reserve(NewCapacity) verwenden um sicherzustellen, dass der Vektor eine Kapazität von mindestens NewCapacity hat .


Denken Sie auch daran, dass das zugrunde liegende Array ebenfalls gelöscht wird, wenn der Vektor zerstört wird.


Einige Code-Antworten


vector<int>
v (4,100) int* pv = v.c_array();
int pv[4] = { 4, 4, 4, 4};
vector<int>
v (pv);
int* pv = &v[0];
int* pv = &v[0] 
std::vector<int>
v(4,100);
int* pv = &v[0];
std::vector<int>
v(4,100);
//Maybe need v.reserve(40);
//reallocate to block out space for 40 elements