Estoy tratando de usar std::vector
como una char
matriz.
Mi función toma un puntero vacío:
void process_data(const void *data);
Antes simplemente usaba este código:
char something[] = "my data here";
process_data(something);
Que funcionó como se esperaba.
Pero ahora necesito la dinámica de std::vector
, así que probé este código en su lugar:
vector<char> something;
*cut*
process_data(something);
La pregunta es, ¿cómo paso el vector char a mi función para poder acceder a los datos brutos del vector (sin importar el formato que sea: flotantes, etc.)?
Intenté esto:
process_data(&something);
Y esto:
process_data(&something.begin());
Pero devuelve un puntero a los datos e incomprensibles, y éste dio aviso: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
cuál es la excepción a esta respuesta (y no tiene un almacenamiento de memoria contiguo debool
s).std::vector<bool>
porquestd::vector<bool>
requiere el uso de un objeto proxy y ese proxy no se puede convertir implícitamente en abool*
. Como solución alternativa para esto, si necesita una secuencia debool
, es mejor usar astd::vector<char>
. @Motti.data()
- Solo voy a fingir que no lo vi feo&*iterator
: Pdata()
vida? Si el vector nunca cambia de tamaño, ya sea más grande o más pequeño (a través depush_back()
u otras funciones, incluidasreserve
), ¿se garantiza que el puntero vivirá tanto tiempo como el vector, señalando el lugar correcto?something.data()
devolverá un puntero al espacio de datos del vector.fuente
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
es nuevo en C ++ 11Tome un puntero al primer elemento en su lugar:
fuente