// test.cpp - Aplicación
#include <iostream>
#include <iomanip>
#include <string>
#include "vectorT.h"
using namespace std;

struct t_nro_tfno
{
  string nombre;
  long telefono;
};

void visualizar(Vector<t_nro_tfno *>& v)
{
  for (int i = 0; i < v.longitud(); i++)
  {
    cout << "Nombre:    " << v[i]->nombre << endl;
    cout << "Teléfono:  " << v[i]->telefono << endl;
  }
  cout << "\n\n";
}

template<class T> void visualizar(Vector<T *>& v)
{
  for (int i = 0; i < v.longitud(); i++)
    cout << setw(7) << *(v[i]);
  cout << "\n\n";
}

template<class T> Vector<T *> copiar(Vector<T *>& v)
{
  Vector<T *> x(v.longitud());
  for (int i = 0; i < v.longitud(); i++)
    x[i] = new T(*v[i]);
  return x;
}

int main()
{
  Vector<double *> vector1(3), vector2(3);
  // Asignar datos a vector1
  for (int i = 0; i < vector1.longitud(); i++)
    vector1[i] = new double(i+1);
  // Visualizar los datos referenciados por vector1
  cout << "vector1: "; visualizar(vector1);
  // Hacer un duplicado de los datos: operador de asignación
  vector2 = copiar(vector1);
  // Poner a cero los datos referenciados por vector1
  for (int i = 0; i < vector1.longitud(); i++)
    *(vector1[i]) = 0;
  // Visualizar los datos referenciados por vector2 y vector1
  cout << "vector2: "; visualizar(vector2);
  cout << "vector1: "; visualizar(vector1);
  // Liberar la memoria ocupada por los datos de vector1 y vector2
  for (int i = 0; i < vector1.longitud(); i++)
  {
    delete vector1[i];
    delete vector2[i];
  }
  // Matriz de elementos de tipo "t_nro_tfno"
  Vector<t_nro_tfno *> vector3(5);
  // Asignar datos
  for (int i = 0; i < vector3.longitud(); i++)
  {
    vector3[i] = new t_nro_tfno;
    cout << "Nombre:    "; getline(cin, vector3[i]->nombre); 
    cout << "Teléfono:  "; cin >> vector3[i]->telefono;
    cin.ignore();
  }
  // Visualizar los datos de vector3
  cout << "vector3:\n"; visualizar(vector3);
  // Liberar la memoria ocupada por los datos de vector3
  for (int i = 0; i < vector1.longitud(); i++)
    delete vector3[i];

  system("pause");
}

