Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ja_90 en 8 Diciembre 2014, 01:18 am



Título: Vector(STL) con estructuras
Publicado por: Ja_90 en 8 Diciembre 2014, 01:18 am
Buenas, queria resolver una duda referente a el uso de vectores con estructuras. A lo que me refiero es a que si puedo hacer esto:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. struct Estructura
  7. {
  8.     string nombre;
  9.     int Edad;
  10. };
  11.  
  12. int main()
  13. {
  14.      Estructura persona[2];    
  15.  
  16.      for (int i=0 ; i<2 ; i++)
  17.      {
  18.          cout << "Ingrese nombre: ";
  19.          getline(cin,persona[i].nombre);
  20.          cout << "Ingrese edad: ";
  21.          cin >> persona[i].edad;
  22.          cin.ignore();
  23.      }
  24.  
  25.     // Y para imprimirlo seria:
  26.  
  27.      for (int i=0 ; i<2 ; i++)
  28.      {
  29.          cout << persona[i].nombre << endl;
  30.          cout << persona[i].edad << endl;
  31.      }
  32. }
  33.  

Ahora en vez de
Código
  1. Estructura persona[2];
Hacer algo como
Código
  1. vector<Estructura>Arreglo; // Hasta aqui declare un vector de tipo Estructura


Pero como hago la parte de:
Código
  1. for (int i=0 ; i<2 ; i++)
  2.      {
  3.          cout << "Ingrese nombre: ";
  4.          getline(cin,persona[i].nombre);
  5.          cout << "Ingrese edad: ";
  6.          cin >> persona[i].edad;
  7.          cin.ignore();
  8.      }
  9.  
Como asigno el nombre y la edad que pida al usuario a el vector que cree del tipo Estructura??...

Esto se puedo hacer?. Gracias por su colaboracion.


Título: Re: Vector(STL) con estructuras
Publicado por: ivancea96 en 8 Diciembre 2014, 01:23 am
O utilizas una estructura temporal, y luego la insertas en el vector,

o al comienzo de cada ciclo, le insertas una estructura, y trabajas sobre esa estructura (v[ i ])

o le pones un tamaño inicial al vector, y ya no necesitas insertar la estructura cada ciclo.


Título: Re: Vector(STL) con estructuras
Publicado por: Ja_90 en 8 Diciembre 2014, 02:08 am
O utilizas una estructura temporal, y luego la insertas en el vector,

o al comienzo de cada ciclo, le insertas una estructura, y trabajas sobre esa estructura (v[ i ])

o le pones un tamaño inicial al vector, y ya no necesitas insertar la estructura cada ciclo.

Realice lo ultimo que mencionaste y funciono, ahora bien me podrias dar una pequena explicacion de las 2 primeras ya que para ser sincero no entendi muy bien. Te lo agradeceria. Perdona la molestia.


Título: Re: Vector(STL) con estructuras
Publicado por: Orubatosu en 8 Diciembre 2014, 08:59 am
S no me equivoco, (y es como yo suelo hacerlo), si creas un vector de tuplas (o cualquier otro contenedor, como una lista) lo que hago es crear una variable tupla temporal, y a cada "vuelta" la meto en el vector usando push_back

Por ejemplo, para una tupla como :

Código:
struct Empleado {
   int DNI;
   string categoria;
   double sueldo;
};

Deseo leer de un fichero de texto y meter los datos en un vector:

Código:
    Empleado datos;
    vector<Empleado> E;
    string cate;
    // Carga datos desde file
    ifstream F;
    F.open("empleados.txt");
    while(!F.eof()){
        F >> datos.DNI;
        F >> datos.categoria;
        F >> datos.sueldo;
        E.push_back(datos);
    }
    F.close();

Es un ejemplo muy sencillo y quizás un poco "chapuza", pero creo que explica el funcionamiento. Creas una variable del tipo tupla que deseas, la rellenas con los datos y la metes en el vector, y lo haces de nuevo hasta terminar.

De todos modos, en lo relativo a vectores, ves pensando en ver como funcionan los iteradores, que son otra forma de acceder a los vectores, porque te será mas útil y ademas imprescindible para manejar otros contenedores de la STL, porque por ejemplo las listas (que son como vectores pero mas versátiles) solo pueden manejarse con iteradores, y no con índices como los vectores.