Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Para los interesados en std::vector

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Para los interesados en std::vector Responder citando

he creado este hilo para los que esten interesados en vectores, voy a exponer un problema general para que entre todos aprendamos más sobre std::vector


El problema que propongo es que en un vector de enteros, el valor de cada celda, sea igual al de la posicion donde se encuentra dentro del vector, por ejemplo el valor v[4]=4, el valor para v[7]=7,... y asi...
y que las funciones añadir y borrar no interfieran en los valores, es decir, que si tenemos el vector con 5 elementos (y el valor es igual al indice como he dicho antes), si borramos el elemento 4 (mediante el metodo de Cesar Salazar), el vector quedaria asi:
v[0]=0, v[1]=1, v[2]=2, v[3]=3, y v[4]=5.
entonces hay un error por que v[4] deberia ser 4 y no 5.

Un ejemplo:
primero...
//si se crea el vector de enteros y una variable tipo int:
std::vector<int> v(0); //hemos inicializado el vector v con 0 elementos.
int indice=0;

//creamos la funcion añadir y eliminar

añadir()
{
v.resize(indice); //creamos una celda del vector nueva
v.push_back(indice); //añadimos al vector un 0 en la posicion 0
indice++; //para el siguiente valdrá 1 y asi... hasta donde sea.
}

y como bien dijo Cesar Salazar, para borrar...

void TFotos::borrar(int Index)
{
int recorrer;
// recorremos el vector e intercambiamos los elementos
for(recorrer=Index;recorrer!=(int) this->v.size()-1;recorrer++)
{
std::swap(this->v[recorrer],this->v[recorrer+1]);
}
this->v.pop_back(); // y borramos el ultimo
}
Volver arriba
Mensaje    Asunto: me olvidaba decir... Responder citando

me olvidaba decir que una vez borrado v[4], al crear una celda nueva, seria la v[5]=5; y entonces v[4] y v[5] tendrian el mismo valor de indice.
entonces habria que dejar el v[4] como vacio y v[5]=5, y al crear uno nuevo rellenar el v[4] con 4 que esta libre... que opinas?
Volver arriba
Mensaje    Asunto: Responder citando

Hola.

¿Se trata de una adivinanza? ¿Qué quieres preguntar? ¿Qué quieres consultar? ¿Qué quieres exponer?

No entiendo el rollo que has soltado para qué sirve.

Un saludo.
_________________
Nunca digas "Es imposible" sin intentarlo antes.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

a lo mejor se te paso, cuando creas un nuevo elemento, con
el metodo pushback, este se situa, al final, del vector, agregando otro, no tomando la direccion, del ultimo..
Cita:
entonces habria que dejar el v[4] como vacio y v[5]=5, y al crear uno nuevo rellenar el v[4] con 4 que esta libre...


Espero que con este quede mas claro..
ahora si lo que te refires a insertar, un elemento dentro del vector, dentro de otra posicion, debes insertar un elemento NULL con pushback, al final, intercambiar del ultimo a la posicion, que deseas insertar, y posteriormente, el elemento que te queda en NULL, ya no sera el ultimo, si no, donde deseas insertar, y ahi puedes meter, el nuevo elemento..


saludos..

el codigo quedaria asi, usando tu ejemplo de los enteros
Código:
void Insert(int numero, int Index){
   //insertamos una nueva ubicacion al final
    V.push_back(numero);

// la ponemos en us posicion que marca el INDEX
        for(int recorrer=(int) V.size()-1; recorrer!= Index+1; recorrer--){
            std::swap(V[recorrer],V[recorrer-1]);

        }
}

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: asi si va bien Responder citando

Gracias César
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.