/* * 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 warning( disable : 4786 ) #include #include template class List { public: List(int s=0); ~List(); 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); 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; delete [] element; } 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::SetSize(int s){ if(s==0) { if(element) delete element;} 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) Add(t); else { Add(element[num-1]); for(int i=num-1;i>n;i--) { element[i+1]=element[i]; } element[n]=t; } } #endif