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

Contenedores en C++

Estas en el tema de Contenedores en C++ en el foro de C/C++ en Foros del Web. Hola gusto en saludar, tengo una consulta y todo empieza asi: Cree la tipica clase Arreglo, a la cual le asigno un nombre cuando se ...
  #1 (permalink)  
Antiguo 17/04/2010, 16:52
Avatar de asdf21  
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Pregunta Contenedores en C++

Hola gusto en saludar, tengo una consulta y todo empieza asi:

Cree la tipica clase Arreglo, a la cual le asigno un nombre cuando se crea. (en la interfaz del programa)

Ahora lo que quiero hacer es Crear un contenedor para almacenar todos los objetos arreglos que se creen.

Código:
#ifndef ARREGLO_H
#define ARREGLO_H

#include <stdio.h>
#include <string.h>

class Arreglo
{
    private:

        int *vector;
        int tamano;
        int cantidad;
        char *nombre;

    public:
        Arreglo(const char*, int);
        int getPos(int);
        int getCant();
        int getTam();
        char *getNombre(void){ return nombre ;}
        void insertElement(int a);

        ~Arreglo();

};

#endif // ARREGLO_H


Arreglo::Arreglo(const char *unnombre, int n)
{
    nombre = new char [strlen(unnombre)+1];
    strcpy(nombre,unnombre);
    tamano=n;
    cantidad=0;
    vector = new int[n];

    for(int i=0; i<n; i++)
    {
        vector[i]=0;
    }
}

int Arreglo::getCant()
{
    return cantidad;
}

/*char Arreglo::getNombre(void)
{
    return *nombre;
}*/

int Arreglo::getPos(int a)
{
    return vector[a];
}

int Arreglo::getTam()
{
    return tamano;
}

void Arreglo::insertElement(int dato)
{
    if(tamano == cantidad)
    {
        throw "No queda espacio en el vector";
    }

    vector[cantidad] = dato;
    cantidad++;

}

Arreglo::~Arreglo()
{
    delete []vector;
}
Pero no encuentro el modo de realizarlo, ya que en java era bastante facil crear el arreglo de objetos. Iba a utilizar la plantilla de vector pero a la vez quiero hacer otras operaciones con el conjunto de vectores que guarde asi que quiero implementar mi propia clase, pero no tengo idea de como lograrlo, osea mas que todo crear el arreglo de objetos que guarde a todos los objetos creado por la clase Arreglo.

Ojala se haya entendido mi duda

saludos
  #2 (permalink)  
Antiguo 17/04/2010, 21:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Contenedores en C++

Ejemplo simple:
Código C++:
Ver original
  1. Arreglo *arreglos[5];
  2.     arreglos[0] = new Arreglo("Nombre", 1);
  3.     arreglos[1] = new Arreglo("Nombre", 2);
  4.     arreglos[2] = new Arreglo("Nombre", 3);
  5.     arreglos[3] = new Arreglo("Nombre", 4);
  6.     arreglos[4] = new Arreglo("Nombre", 5);
  #3 (permalink)  
Antiguo 17/04/2010, 22:41
Avatar de asdf21  
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Contenedores en C++

Cita:
Iniciado por razpeitia Ver Mensaje
Ejemplo simple:
Código C++:
Ver original
  1. Arreglo *arreglos[5];
  2.     arreglos[0] = new Arreglo("Nombre", 1);
  3.     arreglos[1] = new Arreglo("Nombre", 2);
  4.     arreglos[2] = new Arreglo("Nombre", 3);
  5.     arreglos[3] = new Arreglo("Nombre", 4);
  6.     arreglos[4] = new Arreglo("Nombre", 5);
primero que todo gracias por responder

sobre el ejemplo, tenia en mente algo asi pero si quiero que ese arreglo sea dinamico?.

seria algo asi?

Código:
Arreglo *arreglo;
arreglo = new Arreglo[tamaño]
me gustaria tener un concepto mas claro.

saludos

saludos
  #4 (permalink)  
Antiguo 18/04/2010, 10:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Contenedores en C++

Bueno depende, yo por dinámico entiendo listas (#include<list>), que no es lo mismo que arreglos que varían de tamaño (#include <vector>)

Pero independientemente de eso, puedes hacerlo con el operador new[] simplemente definiendo un constructor sin argumentos.

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <vector>
  3.  
  4. #ifndef ARREGLO_H
  5. #define ARREGLO_H
  6.  
  7. #include <string.h>
  8.  
  9. class Arreglo
  10. {
  11.     private:
  12.  
  13.         int *vector;
  14.         int tamano;
  15.         int cantidad;
  16.         char *nombre;
  17.  
  18.     public:
  19.         Arreglo();
  20.         Arreglo(const char*, int);
  21.         int getPos(int);
  22.         int getCant();
  23.         int getTam();
  24.         char *getNombre(void){ return nombre ;}
  25.         void insertElement(int a);
  26.  
  27.         ~Arreglo();
  28.  
  29. };
  30.  
  31. #endif // ARREGLO_H
  32.  
  33. Arreglo::Arreglo(){
  34.     vector = NULL;
  35.     tamano = 0;
  36.     cantidad = 0;
  37.     nombre = NULL;
  38. }
  39.  
  40. Arreglo::Arreglo(const char *unnombre, int n)
  41. {
  42.     nombre = new char [strlen(unnombre)+1];
  43.     strcpy(nombre,unnombre);
  44.     tamano=n;
  45.     cantidad=0;
  46.     vector = new int[n];
  47.  
  48.     for(int i=0; i<n; i++)
  49.     {
  50.         vector[i]=0;
  51.     }
  52. }
  53.  
  54. int Arreglo::getCant()
  55. {
  56.     return cantidad;
  57. }
  58.  
  59. /*char Arreglo::getNombre(void)
  60. {
  61.     return *nombre;
  62. }*/
  63.  
  64. int Arreglo::getPos(int a)
  65. {
  66.     return vector[a];
  67. }
  68.  
  69. int Arreglo::getTam()
  70. {
  71.     return tamano;
  72. }
  73.  
  74. void Arreglo::insertElement(int dato)
  75. {
  76.     if(tamano == cantidad)
  77.     {
  78.         throw "No queda espacio en el vector";
  79.     }
  80.  
  81.     vector[cantidad] = dato;
  82.     cantidad++;
  83.  
  84. }
  85.  
  86. Arreglo::~Arreglo()
  87. {
  88.     delete []vector;
  89. }
  90.  
  91. int main(){
  92.     Arreglo *arreglo;
  93.     arreglo = new Arreglo[5];
  94.     return 0;
  95. }
  #5 (permalink)  
Antiguo 18/04/2010, 22:03
Avatar de asdf21  
Fecha de Ingreso: abril-2010
Mensajes: 12
Antigüedad: 14 años
Puntos: 0
Respuesta: Contenedores en C++

Gracias por responder pero aun no se aclara mi duda, explicare mejor mi problema para que se entienda lo que quiero hacer, el problema es el siguiente:

Cita:
El sistema solicita la cantidad de arreglos. Luego, se ingresan los arreglos: para cada arreglo se indica el nombre, su cantidad de elementos y los datos contenidos en el arreglo(solo enteros), y asi sucesivamente.
Una vez ingresado los arreglos se despliega un menu que pide las clasicas acciones, como por ejemplo: dado el nombre del arreglo, mostrar su posiciones y mayor valor etc...
Y ese es el problema. Como se puede ver cree la clase Arreglo para crear un objeto que tiene un nombre y vector de datos. Mi problema surgio en como almacenar la cantidad objetos (de la clase Arreglo) que cree durante la ejecucion.
Esa es mi duda como crear otra clase que almacene los objetos arreglo y a la vez pueda accesar a ellos por medio de esa clase para buscar el mayor y todas esas operaciones triviales.

Y asi es como llegue a preguntar como se crearia un vector que almacene objetos de otra clase y se pueda accesar a esos objetos facilmente.

Etiquetas: contenedores
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:12.