我正在尋找關於這個話題,我發現很多方法[]數組轉換爲標準::向量,就像使用:複製數組到一個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