Vector(STL) con estructuras

Iniciado por Ja_90, 8 Diciembre 2014, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

Ja_90

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 (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
     
struct Estructura
{
     string nombre;
     int Edad;
};
     
int main()
{
      Estructura persona[2];   
   
      for (int i=0 ; i<2 ; i++)
      {
          cout << "Ingrese nombre: ";
          getline(cin,persona[i].nombre);
          cout << "Ingrese edad: ";
          cin >> persona[i].edad;
          cin.ignore();
      }
     
     // Y para imprimirlo seria:
     
      for (int i=0 ; i<2 ; i++)
      {
          cout << persona[i].nombre << endl;
          cout << persona[i].edad << endl;
      }
}


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

Pero como hago la parte de:
Código (cpp) [Seleccionar]

for (int i=0 ; i<2 ; i++)
      {
          cout << "Ingrese nombre: ";
          getline(cin,persona[i].nombre);
          cout << "Ingrese edad: ";
          cin >> persona[i].edad;
          cin.ignore();
      }

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.
:D  ::::Ja_90::::   :D

ivancea96

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.

Ja_90

Cita de: 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.

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.
:D  ::::Ja_90::::   :D

Orubatosu

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 :


struct Empleado {
   int DNI;
   string categoria;
   double sueldo;
};


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


    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.
"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998