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

Remplazar posicion vacia de vector

Estas en el tema de Remplazar posicion vacia de vector en el foro de C/C++ en Foros del Web. Hola, alguien sabría como hacer esto: Se supone que tenemos un vector de 5 posiciones y elimino la 3. Como puedo hacer para que los ...
  #1 (permalink)  
Antiguo 29/06/2015, 12:27
 
Fecha de Ingreso: junio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Exclamación Remplazar posicion vacia de vector

Hola, alguien sabría como hacer esto:
Se supone que tenemos un vector de 5 posiciones y elimino la 3. Como puedo hacer para que los datos de la posición[5] estén en la [3] y así no tener espacios en blanco en el vector
c++
Saludos y gracias de antemano
  #2 (permalink)  
Antiguo 29/06/2015, 12:35
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: Remplazar posicion vacia de vector

¿Qué vectores estás utilizando? ¿Estáticos? ¿Los de la STL? ¿Un puntero y has reservado memoria?
Cuéntanos más.

Yo lo que haría sería un bucle que coja el elemento de la posición i-ésima y lo pase a la i-ésima-1 (donde i-ésima-1 es la que borraste). Los pasas todos a la posición de antes y el último lo borras o no sé qué estas haciendo por que no sé que vectores usas...
  #3 (permalink)  
Antiguo 29/06/2015, 16:12
 
Fecha de Ingreso: junio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: Remplazar posicion vacia de vector

El vector esta deifindo con esta estructura
typedef struct{
string IDE;
string name;
int price;
int seat;
int idLuggage;
}Users;

ejemplo: 45|pedro|15|1|0 pos[0]
46|juan|20|2|1 pos[1]
47|andres|25|3|1 pos[2]

borro juan: 45 [pos 1] y resulta esto:
45|pedro|15|1|0 pos[0]
47|andres|25|3|1 pos[2]
La pregunta es como hacer que lo de pos[2](la ultima del vector) se establezca en pos[1], despues de borrar lo juan. Creo que mi error es porque no utilizo una aux y se sobrescribe antes de borrar pero ya no se que pensar.
Lo que yo he hecho es sacar cual es la posicion del vecotr que se elimina[pos] y cual es la ultima[last] y hacer algo asi:
usuario=vector tipo users
tripulacion.usuario[pos]=tripulacion.usuario[last].
*Tripulación es otra estructura que contiene a usuarios
Siento si la explicación no es buena pero no se como poder explicarlo mejor
  #4 (permalink)  
Antiguo 29/06/2015, 16:14
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Remplazar posicion vacia de vector

Mira a ver si esto te sirve:
http://c.conclase.net/edd/index.php?cap=001#inicio
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 30/06/2015, 00:35
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Remplazar posicion vacia de vector

Nota incial: En C++ no hace falta hacer

Código C++:
Ver original
  1. typedef struct { } User;

Puedes conseguir el mismo efecto con

Código C++:
Ver original
  1. struct User
  2. { };

Te ahorras el typedef y usas una sintaxis más acorde con C++.

Cita:
Iniciado por juancarlosbiar Ver Mensaje
La pregunta es como hacer que lo de pos[2](la ultima del vector) se establezca en pos[1], despues de borrar lo juan. Creo que mi error es porque no utilizo una aux y se sobrescribe antes de borrar pero ya no se que pensar.
Si estás usando un arreglo "crudo", es decir, algo tal que:

Código C++:
Ver original
  1. User[20] users;

No te queda otra solución que mover a mano los objetos para que el hueco dejado por el elemento borrado se quede al final del arreglo.

En cambio, si usas un contenedor no ordenado de C++, por ejemplo vector, parar borrar un elemento tienes que hacer uso de los iteradores:

Código C++:
Ver original
  1. std::vector< User > users;
  2.  
  3. // Se rellena el vector
  4. // ...
  5.  
  6. // Borramos el quinto elemento
  7. users.erase( users.begin( ) + 4 );

Un saludo.

Etiquetas: c++, remplazar, vector
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 13:27.