中間挿入を含む固定配列のデータを操作する必要があります。 memcpyなどを使用するのではなく、私はベクトルを使用したい。私は がベクトル要素をCスタイルの配列に戻したいときに問題があります。 は、ここでは、コードです:
std :: vectorの内容をCスタイルの静的配列に安全にコピーするにはどうすればいいですか?
warning C4996: 'std::_Copy_opt' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\xutility(2270) : see declaration of 'std::_Copy_opt'
1> Message: 'You have used a std:: construct that is not safe. See documentation on how to use the Safe Standard C++ Library'
1> c:\documents and settings\mhd\my documents\tesvector.cpp(50) : see reference to function template instantiation '_OutIt std::copy<std::_Vector_iterator<_Ty,_Alloc>,BYTE*>(_InIt,_InIt,_OutIt)' being compiled
1> with
1> [
1> _OutIt=BYTE *,
1> _Ty=BYTE,
1> _Alloc=std::allocator<BYTE>,
1> _InIt=std::_Vector_iterator<BYTE,std::allocator<BYTE>>
1> ]
私はそれを実行すると、私は次の実行時エラーを得た:
Run-Time Check Failure #2 - Stack around the variable 'myarr' was corrupted.
void tryvector()
{
using namespace std;
const int MAX_SIZE=16;
BYTE myarr[MAX_SIZE]={0xb0,0x45,0x47,0xba,0x11,0x12, 0x4e};
vector<BYTE> myvec (myarr, myarr+MAX_SIZE);
vector<BYTE>::iterator it;
printf("myarr pre :");
for(int i=0;i<MAX_SIZE;++i){
printf("%02x ", myarr[i]) ;
}
printf("\nmyvec pre :")
for(it=myvec.begin(); it<myvec.end();++it){
cout<<hex<<static_cast<int>(*it)<<" ";
}
it = myvec.begin()+ 3;
myvec.insert(it,0x5f);
printf("\nmyvec post:");
for(it=myvec.begin(); it<myvec.end();++it){
cout<<hex<<static_cast<int>(*it)<<" ";
}
copy(myvec.begin(), myvec.end(), myarr); //???
printf("\nmyarr post:");
for(int i=0;i<MAX_SIZE;++i){
printf("%02x ", myarr[i]) ;
}
}
私は2005年 対使用していますがここで警告があります
私は上記のコードのように '中間挿入'は が特定のprobであるので、私はリストまたはdequeの代わりにベクトルを使用することに注意してくださいレム。 「最後に挿入する」よりも少なく、「要素のランダムアクセス」 よりも少なくなります。
"C++を使用し、Cスタイルの配列の実装を削除します。 すべての配列の実装にベクトルのみを使用する"はあまり役に立ちません。
ありがとうございました。あなたが行うことができます
単に配列の代わりにベクトル<>を使用しているからといって、memcpy()が起こっていないわけではありません。 vector <>メソッドは理解しやすくなりますが、同じことを行い、大きな配列ではパフォーマンスが低下します。 – slacy