| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Dom 23 Mar, 2003 12:55 pm Asunto: pregunta sobre arrays creados dinamicamente |
|
|
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 |
|
 |
John Invitado
|
Publicado: Dom 23 Mar, 2003 11:12 pm Asunto: .... |
|
|
Hola, yo te aconsejo que uses una lista simple para solucionar tu problema.
Saludos. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 24 Mar, 2003 2:28 am Asunto: |
|
|
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 |
|
 |
lycopersium Lt


Registrado: 12 Oct 2002Mensajes: 90Ubicación: Roquetas de Mar - Almería
|
Publicado: Mie 26 Mar, 2003 8:54 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 27 Mar, 2003 4:01 am Asunto: |
|
|
#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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 06 Oct, 2004 5:54 pm Asunto: |
|
|
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(); |
_________________
 |
|
| Volver arriba |
|
 |
|