最近、古い C スタイルの関数ではなく、標準の C++ ライブラリ関数を使用するように一部のコードを更新しようとしています。特に、私は次のことを試みました(簡単にするために人工的な作業例-コードが醜いことは知っていますが、問題を簡潔に示しています):
std::vector<int> vData;
vData.push_back(10990);
vData.push_back(11990);
vData.push_back(12990);
vData.push_back(13990);
unsigned char szBuffer[100];
memset(szBuffer,0,sizeof(szBuffer));
std::copy(vData.begin(),vData.end(),szBuffer);
これは、置き換えようとしているコードと同様に動作することを期待していました。
memcpy(szBuffer,&vData[0],sizeof(int)*vData.size());
しかし、コードをデバッグすると、私が書いたコードは、ベクトル内の 4 つの整数の完全なビット パターンではなくstd::copy
、バッファーの最初の 4 バイトにのみ書き込みを行っていることが明らかです。unsigned char
誰かが私が間違ったことを教えてもらえますか、それとも単にstd::copy
この方法では使用できず、そのままにしておくべきなのmemcpy
でしょうか?