私はこのトピックについて探していたと私はSTDに配列[]に変換する多くの方法::ベクトル、使用するような発見への配列のコピー:中の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)
{
bufferRead.resize(totalToRead);
DWORD totalRead;
ReadFile(mhFile, &bufferRead[0], totalToRead, &totalRead, NULL);
bufferRead.resize(totalRead);
return IDiskAccess::READ_OK;
}
(私はポストを簡素化するためのReadFile関数のエラー処理を削除した):
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;
}
をそして、私はやりたいです。
働いていますが、安全でないことを誇りに思います。私はそれが大丈夫です、ベクトルによって使用されるメモリが連続していると信じていますが、私はこのようにベクトルを使用している人は見たことがありません。
このようなベクトルを使用するのは正しいですか?他に良いオプションはありますか?
He *は最初にリサイズします(関数の最初の行を参照)。 – celtschk
私は彼がそうしなかったことを意味していませんでした。私はその重要性を強調していました。 – TheBuzzSaw
あなたはそれを暗示する*の意味がないかもしれませんが、そうしました。 – celtschk