1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
template< class T >
class Set{
private:
T *type;
int size;
int current;
public:
Set();
Set(int);
void add(T object);
bool remove( T object );
class iterator;
friend class iterator;
class iterator{
Set & set;
int index;
iterator( Set & s ) : set(s) , index(0){}
//To create the " end sentinel " iterator:
iterator( Set & s, bool ): set(s), index( s.current ){}
iterator begin(){ return iterator(*this); }
//To create the "end sentinel" iterator:
};
};
template< class T >
Set<T>::Set(){
size = 5;//default size for set
current = 0;
type = new T[size];
}
template< class T >
Set<T>::Set( int s ){
size = s;//default size for set
current = 0;
type = new T[size];
}
template< class T >
void Set<T>::add( T object ){
//should check duplication before adding new item to set
int i = 0;
T *p = find(type, type + current, object);
if((p == (type + size)) && (current < size)){
type[current] = object;
++current;
}
//if newitem without causing duplication , add into type
//possible try to check type as well. if different type, raise exception error
if( current < size )
type[current++] = object;
else
cout << "List is full...." << endl;
}
template< class T >
bool remove( T object ){
//loop through the list to search the object
int i = 0;
bool found = false;//Initialize false
for( ; i < current ; i++){
found = ( type[i] == object );
if(found){
--current;
type[i] = type[current];
break;
}
}
//if found then remove the item and reduce current value
//possible try to shift the
return found;
}
int main(){
string list[] = {"Lim" , "Tan" , "Lee" , "Thor" , "Adrian" ,"Henry" , "Zachary" , "Michael" , "Ryan" , "Michelle"};
Set<string>names(10);
for( int i = 0 ; i < 10 ; i++ ){
names.add("Lee");
}
//Set::iterator
//Set::iterator
Set<string>::iterator myIterator( Set<string> , string );
for( int i = 0 ; i < 10 ; i++ ){
cout << list[i] << endl;
}
system( "pause" );
return 0;
}
|