我正在搜索这个主题,我找到了很多方法将array []转换为std :: vector,就像使用:
assign(a, a + n)
或者,直接在构造函数中:
std::vector 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函数的错误处理以简化帖子).
它工作正常,但我担心它不安全.我相信它没关系,因为矢量使用的内存是连续的,但我从未见过有人使用矢量这种方式.
使用这样的矢量是否正确?还有其他更好的选择吗?