Estoy usando una API de terceros (CryptEncrypt, para ser precisos) que toma una matriz C como parámetro de entrada/salida. Lógicamente, la API se resume en la siguiente función:pasar std :: vector a una función que modifica una matriz de entrada
void add1(int *inout, size_t length)
{
for(size_t i = 0; i < length; i++)
{
inout[i] += 1;
}
}
que estoy tratando de evitar el uso de matrices primas, por lo que mi pregunta es ¿Puedo usar el std :: vector como una entrada a la API de arriba? Algo parecido a lo siguiente:
#include <vector>
int main()
{
std::vector<int> v(10); // vector with 10 zeros
add1(&v[0], v.size()); // vector with 10 ones?
}
¿Puedo usar la garantía 'contigua de almacenamiento' de un vector para escribir datos en ella? Me inclino a creer que esto está bien (funciona con mi compilador), pero me sentiría mucho mejor si alguien más entendido que yo puede confirmar si dicho uso no infringe las garantías estándar de C++. :)
Gracias de antemano!
Uno de los objetivos de diseño de std :: vector era que este ejemplo debería funcionar. – Sjoerd
En el nuevo estándar, incluso hay un miembro 'v.data()' por lo que ya no tiene que escribir '& v [0]' y lo que podría ser más claro que 'add1 (v.data(), v.size()); '! – Sjoerd
gracias a todos por las respuestas y comentarios! –