// vectorEspec.cpp - Especialización explícita de la plantilla
#include <iostream>
using namespace std;

// Crear una matriz con ne elementos
Vector<void *>::Vector<void *>(int ne)
{
  if (ne < 1)
  {
    cerr << "Nº de elementos no válido: " << ne << "\n";
    return;
  }
  nElementos = ne;
  vector = asignarMem(nElementos);
}

// Constructor copia
Vector<void *>::Vector<void *>(const Vector<void *>& v) : vector(0)
{
  *this = v;
}

// Operador de asignación
Vector<void *>& Vector<void *>::operator=(const Vector<void *>& v)
{
  nElementos = v.nElementos;            // número de elementos
  delete [] vector;                     // borrar la matriz actual
  vector = asignarMem(nElementos);      // crear una nueva matriz
  for (int i = 0; i < nElementos; i++)
    vector[i] = v.vector[i];            // copiar los valores
  return *this;           // permitir asignaciones encadenadas
}

// Otros métodos
void **Vector<void *>::asignarMem(int nElems)
{
  try
  {
    void **p = new void *[nElems];
    return p;
  }
  catch(bad_alloc e)
  {
    cout << "Insuficiente espacio de memoria\n";
    exit(-1);
  }
}

