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 

pregunta sobre arrays creados dinamicamente

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: pregunta sobre arrays creados dinamicamente Responder citando

Hola,

quisiera saber si hay alguna forma de añadir un elemento a un array creado dinámicamente.

Por ejemplo, tengo esto:

array=new int[5];

pero en un momento determinado resulta que necesito 6 elementos en vez de 5. De momento lo que hago es crear un segundo array donde copio los elementos temporalmente, borro el array principal y reservo de nuevo memoria con la nueva cantidad de elementos copiando los datos del array temporal. Pregunto si hay alguna forma más rápida de hacerlo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: .... Responder citando

Hola, yo te aconsejo que uses una lista simple para solucionar tu problema.

Saludos.
Volver arriba
Mensaje    Asunto: Responder citando

Hola lycopersium:

Con new no se puede, no existe con el nada parecido a realloc, pero puedes usar las siguientes funciones en lugar de new/delete:

    malloc, calloc, realloc y free

Y otra opción es que uses la plantilla "vector" o "list" de la STL. Un ejemplo mínimo usando "vector" de manera similar a como se haría clásicamente:
Código:
// Añadimos la cabecera necesaria
#include <vector>

// Creamos un array de 5 enteros
std::vector<int> array(5);

// Lo rellenamos similar a como lo haces de manera mas clasica
array[0] = 100;

// O bien, mas seguro. Ya que si te pasas de los
//   limites se dispara una excepcion
array.at(4) = 130;

// Cambiamos el tamaño del array
array.resize(20);

// Si necesitas averiguar el tamaño, tienes
Caption = array.size();


En la web del creador de C++ tienes un comentario sobre realloc y del porque no existe en C++ un equivalente de realloc:

    [Why doesn't C++ have an equivalent to realloc()?]
    http://www.research.att.com/~bs/bs_faq2.html#renew

Saludos:
 _Leo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo, es justo lo q necesitaba.

Otra cosilla: la función insert de vector necesita como parametros la posicion y el valor a insertar. La posición debe ser de tipo iterator y he estado buscando en la ayuda y no me aclaro de como va. Podeis ponerme algun ejemplo de como funciona?

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

#include <vector>

std::vector<int> array(5);
std::vector<int>::iterator iter; // en este caso no lo necesitamos, pero para que veas como declararlo...

// ...y como usarlo para recorrer el vector
for (iter = array.begin(); iter != array.end(); iter++)
    Memo1->Lines->Add(*iter);

// Puedes usar insert con los siguientes argumentos:

// Para hacer un hueco en la posición 2, sin especificar un valor
// o sea, el tercer elemento ya que se cuenta desde 0
array.insert(array.begin()+2);

// Para insertar el numero 111 en la misma posicion
array.insert(array.begin()+2, 111);

// Para insertar 5 elementos con el valor 222
array.insert(array.begin()+2, 5, 222);

// Para insertar una copia de los elementos del vector
// en este caso añadimos una copia completa
// del mismo array al final
array.insert(array.end(), array.begin(), array.end());

// Lo siguiente tambien puede serte util, sirve para añadir un elemento al final
array.push_back(333);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

sera el sereno.. pero no puedo regresar.. la imagen..

esta es la class

Código:
class TFotos{
    //-----------------------------------------------------------------------
    private:
        std::vector< TImage *>Fotos;
        unsigned int posIndex;
    //-----------------------------------------------------------------------
    public:
        TFotos(void){
            posIndex=0;
        };
        ~TFotos(){};
        //-------------------------------------------------------------------
        void __fastcall setFoto(TImage *Img);
        TImage * __fastcall getFoto();
}


esta es la implementacion..

Código:
void __fastcall TFotos::setFoto(TImage *Img){
    this->Fotos.push_back(img);
}
//---------------------------------------------------------------------------
TImage * __fastcall TFotos::getFoto(){
    return (TImage*)(&this->Fotos.operator[](posIndex));
}


y para regresar la imagen, hago lo siguiente, por que no regresa, o se muestra, sera el indice..? o la forma de regresarla... esta raro
Aclaro image, esta declarado de la siguiente manera en la clase

TImage *image;
Código:
    image = pFot->getFoto();

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
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.