Convertir entre C++ std::vector y C array sin copiar

Convertir entre C++ std::vector y C array sin copiar


Me gustaría poder convertir entre std::vector y su matriz C subyacente int* sin copiar explícitamente los datos.


¿Std::vector proporciona acceso a la matriz C subyacente? Estoy buscando algo como esto


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

EDITAR:


Además, ¿es posible hacer lo contrario, es decir, cómo inicializaría un std::vector de una matriz C sin copiar?


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

Respuestas:


Puede obtener un puntero al primer elemento de la siguiente manera:


int* pv = &v[0];

Este puntero solo es válido mientras el vector no sea reasignado. La reasignación ocurre automáticamente si inserta más elementos de los que caben en la capacidad restante del vector (es decir, si v.size() + NumberOfNewElements > v.capacity() . Puedes usar v.reserve(NewCapacity) para asegurarse de que el vector tenga una capacidad de al menos NewCapacity .


También recuerda que cuando el vector se destruye, la matriz subyacente también se elimina.


Algunas respuestas de código


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