Foros del Web » Programación para mayores de 30 ;) » C/C++ »

pasar vector (STL) por referencia

Estas en el tema de pasar vector (STL) por referencia en el foro de C/C++ en Foros del Web. Quiero pasar un vector (de la STL) a una función para modificar/acceder su contenido. He probado esto: Código: void getAllData( std::vector<unsigned char>* char_array ) { ...
  #1 (permalink)  
Antiguo 11/01/2008, 05:08
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
pasar vector (STL) por referencia

Quiero pasar un vector (de la STL) a una función para modificar/acceder su contenido.
He probado esto:
Código:
void getAllData( std::vector<unsigned char>* char_array )
{
      char_array->reserve(10);
      char_array[0] = 1;   //Esto no funciona, da error al compilar
      char_array->push_back( 1 );      //Esto funciona
      unsigned char temp = char_array[0];   //Error de compilación.
}
Sin embargo yo quisiera poder utilizar el operador [ ] para también leer datos del vector. Encontré esto:
Código:
void getAllData( std::vector<unsigned char>& char_array )
{
      char_array->reserve(10);
      char_array[0] = 1;   //No da error pero parece no tener efecto al salir de la función (teniendo comentada por supuesto la siguiente linea)
      char_array.push_back( 1 );      //Esto funciona

}
Cual es la forma correcta de tratar con vectores STL??
  #2 (permalink)  
Antiguo 11/01/2008, 07:02
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años
Puntos: 28
Re: pasar vector (STL) por referencia

En realidad ambas formas "podrían" estar mal así como las tienes planteadas, te explico.

En la primera (que tiene un error):
Código:
void getAllData( std::vector<unsigned char>* char_array )
{
      char_array->reserve(10);
      (*char_array)[0] = 1;   //Esto no funciona, da error al compilar
      char_array->push_back( 1 );      //Esto funciona
      unsigned char temp = char_array[0];   //Error de compilación.
}
Acuerdate que estás pasando un puntero y debes desreferenciar.

Lo que te digo que podría estar mal en ambos es el hecho de que no sabes que tamaño tiene el erreglo. Debes usar el método resize para cambiar el tamaño, reserve solo "reserva" la memoria, mas no "habilita" las posiciones.

En lo personal considero mejor la segunda opción.

Saludos
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
  #3 (permalink)  
Antiguo 11/01/2008, 07:24
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 5 meses
Puntos: 0
Re: pasar vector (STL) por referencia

Si, además creo que confundí el reserve() con el resize()... creo que ahora lo tengo mas claro.

Muchas gracias!
  #4 (permalink)  
Antiguo 11/01/2008, 07:49
Avatar de _Lucifer_  
Fecha de Ingreso: junio-2006
Mensajes: 1.662
Antigüedad: 18 años
Puntos: 28
Re: pasar vector (STL) por referencia

Cita:
Iniciado por clinisbut Ver Mensaje
Si, además creo que confundí el reserve() con el resize()... creo que ahora lo tengo mas claro.

Muchas gracias!
De nada
__________________
Si crees que no tiene sentido, etonces probablemente lo tenga... :arriba:
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:10.