domingo, 22 de febrero de 2015

Template Vector Visual C++


Vector.h



template < class T >

class Vector
{
public:

 Vector( int nArraySize )
 {
  nSize = nArraySize;
  arreglo = new T[ nArraySize ];
  reset();
 }

 int size()
 {
  return nWriteIndex;
 }

 void reset()
 {
  nWriteIndex = 0;
  nReadIndex = 0;
 }

 void add( const T& object )
 {
  if( nWriteIndex < nSize )
  {
   arreglo[ nWriteIndex++ ] = object;
  }
 }

 T &get()
 {
  return arreglo[ nReadIndex ]; 
 }

protected:

 int nSize;
 int nWriteIndex;
 int nReadIndex;
 T *arreglo;
};

Main.cpp

#include <iostream>
#include <cstdlib>
#include <string>

#include "Vector.h"

using namespace std;

void intFc()
{
 Vector < int > integers( 10 );

 cout << "Introduce el valor para llenar el vector\n"
   << "Introduce un negativo para salir: " << endl;

 for( ; ; )
 {
  int n;
  cin >> n;

  if( n < 0 )
  {
   break;
  }

  integers.add( n );
 }

 cout << "Numeros introducidos por el usuario: " << endl;
 
 for( int i = 0 ; i < integers.size() ; i++ )
 {
  cout << i << " : " << integers.get() << endl;
 }
}

class Name
{
public:

 Name() = default;
 Name( string s ) : name( s ) {}
 const string &display()
 {
  return name;
 }

protected:
 string name;
};

void nameFc()
{
 Vector < Name > names( 10 );

 cout << "Introduce nombres para agregar\n"
   << "Introduce x para salir" << endl;

 for( ; ; )
 {
  string s;
  cin >> s;

  if( s == "x" || s == "X" )
  {
   break;
  }

  names.add( Name( s ) );
 }

 cout << "Nombres introducidos por el usuario: " << endl;

 for( int i = 0 ; i < names.size() ; i++ )
 {
  Name &name = names.get();
  cout << i << " : " << name.display() << endl;
 }
}

int main( int argc , char *argv[] )
{
 intFc();
 nameFc();

 system("pause");
 return 0;
}

No hay comentarios:

Publicar un comentario