Comment copier le contenu de std::vector pour c-style de tableau statique,en toute sécurité?

J'ai besoin de manipuler des données dans le tableau fixe impliquant milieu d'insertion.
Plutôt que d'utiliser memcpy,etc. Je veux utiliser le vecteur. J'ai un problème quand je veux
pour copier les éléments du vecteur de retour à la c-gamme de style.
Voici le code:

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]) ;   

    }

}

Je suis avec vs 2005.
Voici l'avertissement:

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>        ]

Quand je le lance , j'ai eu l'erreur d'exécution suivant:


    Run-Time Check Failure #2 - Stack around the variable 'myarr' was corrupted.

Veuillez noter que j'utilise le vecteur lieu de la liste ou deque parce que
le milieu d'insertion", comme le code ci-dessus est juat un problème particulier.
Il va se passer moins de "mise en place à la fin" et
'accès aléatoire de l'élément".

Toute solution ?

Une réponse qui ressemble à:"Vous utiliser c++, baisse de la c gamme de style de mise en œuvre.
Utilisez uniquement des vecteur pour l'ensemble de la matrice de mise en œuvre" n'est pas vraiment utile.

Grâce.

Juste parce que vous êtes à l'aide de vector<> au lieu d'un tableau ne signifie pas que memcpy() n'est pas le cas. Le vector<> les méthodes sont plus faciles à comprendre, mais faire la même chose, et le rendement sera pareil pour les grands tableaux.

OriginalL'auteur mhd | 2009-03-11