Necesito manipular los datos en una matriz fija que implica una inserción intermedia. En lugar de usar memcpy, etc. Quiero usar el vector. Tengo un problema cuando quiero para copiar los elementos vectoriales a la matriz c-style. Aquí está el código:¿Cómo copiar los contenidos de std :: vector a array estático c-style, de forma segura?
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]) ;
}
}
estoy usando vs 2005. aquí está la advertencia:
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> ]
Cuando lo ejecuto, me dieron el error de tiempo de ejecución:
Run-Time Check Failure #2 - Stack around the variable 'myarr' was corrupted.
Tenga en cuenta que utilizo el vector en su lugar list o deque porque la 'inserción del medio' como el código anterior es juat un problema particular Lem. Pasará menos que 'insertando al final' y 'acceso aleatorio del elemento'.
¿Alguna solución?
Cualquier respuesta que se asemeje a: "Utiliza C++, suelta la implementación de la matriz de estilo c. Usar solo el vector para toda la implementación de la matriz" no es realmente útil.
Gracias.
El hecho de que esté utilizando vector <> en lugar de una matriz no significa que memcpy() no esté sucediendo. Los métodos vectoriales <> son más fáciles de entender, pero hacen lo mismo y el rendimiento será pobre para arreglos grandes. – slacy