Tengo una clase que tiene (entre muchas otras cosas) un puntero a char sin signo que se elimina y se reasigna para almacenar algunos datos de otra matriz. Una vez hecho esto con una función¿Cómo puedo hacer el equivalente de memcpy desde una matriz en bruto a std :: vector?
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;
}
No me gusta este código en absoluto, y realmente me gustaría para reemplazar el puntero con un std::vector<unsigned char>
. Mi pregunta es, ¿cómo voy a realizar el aspecto memcpy? Si estuviera pasando un vector como argumento a mi función, podría copiarlo usando iteradores, pero no tengo control sobre el tipo de argumento del parámetro, así que estoy atorado con unsigned char*
. ¿Hay alguna forma de usar iteradores o dimensionar el vector al tamaño correcto y luego acceder a su matriz interna para poder copiar los datos con memcpy
? ¿O incluso algo mejor usando iteradores? Sé que podría usar un ciclo y push_back
, pero eso me parece dolorosamente ineficiente. Cualquier sugerencia será recibida con gratitud.
+1 Mejor solución –
¿Cambiará automáticamente el tamaño del vector o tendré que llamar a borrar y establecer el tamaño del mismo al tamaño de la matriz? – mathematician1975
@ mathematician1975 ver [aquí] (http://en.cppreference.com/w/cpp/container/vector/assign). No tiene que llamar a borrar, cambiar el tamaño ni nada. – juanchopanza