 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Juan e Isabel Invitado
|
Publicado: Vie 22 Oct, 2004 7:29 pm Asunto: Para los interesados en std::vector |
|
|
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 |
|
 |
yo otra vez Invitado
|
Publicado: Vie 22 Oct, 2004 7:45 pm Asunto: me olvidaba decir... |
|
|
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 |
|
 |
Cerúleo Master


Registrado: 04 Ago 2003Mensajes: 332Ubicación: Santander, España
|
Publicado: Mar 26 Oct, 2004 7:02 pm Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 26 Oct, 2004 7:37 pm Asunto: |
|
|
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]);
}
} |
_________________
 |
|
| Volver arriba |
|
 |
J e I Invitado
|
Publicado: Lun 01 Nov, 2004 8:49 am Asunto: asi si va bien |
|
|
| Gracias César |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|