私は(他の多くのものの中で)削除され、別の配列のデータを格納するために再割り当てされるunsigned charへのポインタを持つクラスを持っています。これは私がすべてで、このコードのようにいけない機能どのようにして、生の配列からstd :: vectorに相当するmemcpyを行うことができますか?
class MyClass {
private:
unsigned char* m_Buffer;
int m_BufferSize;
public:
bool SetBuffer(int iSize, const unsigned char* pArray);
};
bool MyClass::SetBuffer(int iSize, const unsigned char* pArray) {
bool bOK = false;
if (pArray != NULL && iSize > 0) {
delete [] m_Buffer;
m_Buffer = new unsigned char[iSize];
memcpy(m_Buffer,pArray,iSize);
m_BufferSize = iSize;
bOK = true;
}
return bOK;
}
で行われ、私は本当にstd::vector<unsigned char>
でポインタを交換したいと思います。私の質問は、私はどのようにmemcpyのアスペクトを実行するのですか?私の関数に引数としてベクトルを渡していた場合は、イテレータを使ってコピーすることができますが、パラメータ引数の型を制御することはできませんので、unsigned char*
がついています。イテレータを使用する方法、またはベクトルのサイズを正しいサイズに変更して内部配列にアクセスする方法はありますか?memcpy
でデータをコピーすることはできますか?またはイテレータを使用した方が良いでしょうか?私はループとpush_back
を使用することができることを知っているが、それは私にとって痛いほど非効率なようだ。どんな提案も感謝して受け取ります。
+1ベストソリューション –
これはベクターのサイズを自動的に変更するか、クリアするためにサイズを配列のサイズに設定する必要がありますか? – mathematician1975
@ mathematician1975 [こちら](http://en.cppreference.com/w/cpp/container/vector/assign)を参照してください。あなたは、明確に、サイズを変更するか何かを呼び出す必要はありません。 – juanchopanza