我正在寻找关于这个话题,我发现很多方法[]数组转换为标准::向量,就像使用:复制数组到一个std ::向量
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函数的错误处理,简化后)。
它正在工作,但我担心它不安全。我相信这是可以的,因为矢量所使用的内存是连续的,但我从来没有见过有人使用这种方法。
使用这样的向量是否正确?还有其他更好的选择吗?
他*不*调整第一字节不Ë大小(看他的函数的第一行)。 – celtschk 2012-01-15 17:18:18
我并不是暗示他没有这么做。我只是强调它的重要性。 – TheBuzzSaw 2012-01-15 18:08:17
你可能没有*表示*来暗示它,但你做到了。 – celtschk 2012-01-15 18:11:22