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