/* * A generic template list class. * Fairly typical of the list example you would * find in any c++ book. */ #ifndef GENERIC_LIST_H #define GENERIC_LIST_H #pragma once #pragma warning( disable : 4786 ) #include #include template class List { public: List(int s=0); ~List(); void Clear(); void Reverse(int s); void Insert(Type t,int n); void allocate(int s); void SetSize(int s); void Pack(); void Add(Type); void AddUnique(Type); int Contains(Type); void Remove(Type); void DelIndex(int i); void Switch(Type t,int n); void Swap(Type, Type); Type * element; int num; int array_size; Type &operator[](int i){assert(i>=0 && i List::List(int s){ num=0; array_size = 0; element = NULL; if(s) { allocate(s); } } template List::~List() { num=0; if(element) { delete [] element; element = NULL; } } template void List::Clear() { num=0; if(element) { delete [] element; element = NULL; } } template void List::allocate(int s){ assert(s>0); assert(s>=num); Type *old = element; array_size =s; element = new Type[array_size]; assert(element); for(int i=0;i void List::Reverse(int s){ if(s==0) { if(element) { delete[] element; element = NULL; } array_size = 0; } else { allocate(s); } num=0; } template void List::SetSize(int s){ if(s==0) { if(element) { delete[] element; element = NULL; } } else { allocate(s); } num=s; } template void List::Pack(){ allocate(num); } template void List::Add(Type t) { assert(num<=array_size); if(num==array_size) { allocate((array_size)?array_size *2:16); } //int i; //for(i=0;i int List::Contains(Type t){ int i; int count=0; for(i=0;i void List::AddUnique(Type t){ if(!Contains(t)) Add(t); } template void List::DelIndex(int i){ assert(i void List::Remove(Type t){ int i; for(i=0;i void List::Insert(Type t,int n){ if ( num == 0 || num == n ) Add(t); else { Add(element[num-1]); for(int i=num-2;i>=n;i--) { element[i+1]=element[i]; } element[n]=t; } } template void List::Switch(Type t,int n) { if(num > n) { element[n] = t; } } template void List::Swap(Type t1, Type t2) { int n1, n2 ; for ( int i = 0 ; i < num ; i ++ ) { if ( element[ i ] == t1 ) n1 = i ; if ( element[ i ] == t2 ) n2 = i ; } Type tTemp ; tTemp = element[ n1 ] ; element[ n1 ] = element[ n2 ] ; element[ n2 ] = tTemp ; } #endif