ero alla ricerca su questo argomento e ho trovato molti modi per convertire una matrice [] a uno std :: vector, come l'utilizzo di:Copia di una matrice in uno std :: vector
assign(a, a + n)
o, in diretta il costruttore:
std::vector<unsigned char> v (a, a + n);
Coloro risolvere il mio problema, ma mi chiedo se è possibile (e corretto) di fare:
myvet.resize(10);
memcpy(&myvet[0], buffer, 10);
mi chiedo questo perché ho il seguente codice:
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;
}
E vorrei fare:
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;
}
(Ho rimosso il trattamento degli errori della funzione ReadFile per semplificare il post).
Sta funzionando, ma temo che non sia sicuro. Credo che sia ok, dato che la memoria utilizzata dal vettore è continua, ma non ho mai visto qualcuno usare i vettori in questo modo.
È corretto utilizzare vettori come questo? C'è qualche altra opzione migliore?
Lui * fa * ridimensiona prima (vedere la prima riga della sua funzione). – celtschk
Non stavo insinuando che non ci riuscisse. Stavo solo sottolineando la sua importanza. – TheBuzzSaw
Potresti non aver * inteso * per implicarlo, ma l'hai fatto. – celtschk