que estaba buscando sobre este tema y he encontrado muchas maneras de convertir una matriz [] a un std :: vector, como el uso de:Copia de una matriz en un std :: vector
assign(a, a + n)
o, directamente en las el constructor:
std::vector<unsigned char> v (a, a + n);
los solucionar mi problema, pero me pregunto si es posible (y correcta) que debe hacer:
myvet.resize(10);
memcpy(&myvet[0], buffer, 10);
me pregunto esto porque tengo el siguiente código:
IDiskAccess::ERetRead nsDisks::DiskAccess::Read(std::vector<uint8_t>& bufferRead, int32_t totalToRead)
{
uint8_t* data = new uint8_t[totalToRead];
DWORD totalRead;
ReadFile(mhFile, data, totalToRead, &totalRead, NULL);
bufferRead.resize(totalRead);
bufferRead.assign(data, data + totalRead);
delete[] data;
return IDiskAccess::READ_OK;
}
Y me gustaría hacer:
IDiskAccess::ERetRead nsDisks::DiskAccess::Read(std::vector<uint8_t>& bufferRead, int32_t totalToRead)
{
bufferRead.resize(totalToRead);
DWORD totalRead;
ReadFile(mhFile, &bufferRead[0], totalToRead, &totalRead, NULL);
bufferRead.resize(totalRead);
return IDiskAccess::READ_OK;
}
(He quitado el tratamiento de error de la función ReadFile para simplificar el post).
Está funcionando, pero tengo miedo de que no sea seguro. Creo que está bien, ya que la memoria utilizada por el vector es continua, pero nunca he visto a alguien usando vectores de esta manera.
¿Es correcto usar vectores como este? ¿Hay alguna otra mejor opción?
He * does * resize primero (vea la primera línea de su función). – celtschk
No estaba insinuando que no lo hizo. Estaba enfatizando su importancia. – TheBuzzSaw
Es posible que no haya * querido decir * que lo insinúe, pero lo hizo. – celtschk