6
ファイルストリームからN
バイトのデータを読み込み、ベクトルに追加します。ファイルからNバイトを読み込んでstd :: vectorに追加します。
myBuffer.reserve(N);
for (int i=0; i<N; ++i)
{
uint8_t tmpByte;
myFileStream.read(&tmpByte, 1);
myBuffer.push_back(tmpByte);
}
が、これは非常に遅いです:それでは、私たちは
basic_ifstream<uint8_t> myFileStream;
と
vector<uint8_t> myBuffer;
現在、私はこのような何かをやっているを持っているとしましょう。
今私はmyFileStream.read
にベクトルに直接データをコピーさせようとしました。ベクトルは、連続した保管場所でその要素を格納しているので、私はこのようなものが可能であることを考えた:
uint8_t* ptr = &myBuffer.back(); // there is already some elements in the buffer (I know)
ptr++; // first element after existing data
myBuffer.resize(myBuffer.size() + N);
myFileStream.read(ptr, N);
しかし、これで私は、ランタイムエラー(ヒープの破損)を取得します。このソリューションで何が問題になっていますか?とにかくこれを行うには良い方法がありますか?
今は動作します:)あなたの助けをありがとう! –
@Ajeet: 'reserve()'はコンテナの 'size()'を変更しません。パフォーマンスに対する正確さを評価します。 –
真。 push_back()を使用していた場合にのみ便利です。私のコメントを削除する。ありがとう@ R。マルティニョ –