Я искал эту тему и нашел много способов конвертировать массив [] в std :: vector, например, используя:
assign(a, a + n)
или, прямо в конструкторе:
std::vector<unsigned char> v ( a, a + n );
Они решают мою проблему, но мне интересно, можно ли (и правильно) это сделать:
myvet.resize( 10 );
memcpy( &myvet[0], buffer, 10 );
Мне интересно это, потому что у меня есть следующий код:
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;
}
И я бы хотел сделать:
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;
}
(Я удалил обработку ошибок функции ReadFile, чтобы упростить публикацию).
Это работает, но я боюсь, что это не безопасно. Я считаю, что это нормально, так как память, используемая вектором, непрерывна, но я никогда не видел, чтобы кто-то использовал векторы таким образом.
Правильно ли использовать такие векторы? Есть ли другой лучший вариант?