Ex 1)
Study how the vector library class is used. Write a program "vector1.cpp" that shows how to use this class. Use the "iterator" function also to go through the list of elements.
Ex 2)
Now that you know how "vector" class works implement your own version calling it "myvector.cpp" . Below is a skeleton version that shows some of the functions you can implement. Implement the "iterator" functionality also.
#include <iostream>
#include <vector>
using namespace std;
//--------------------------------------------------------------------------------------------
class myvector
{
public:
int* holder ;
int size ;
int capacity ;
int currentIndex ;
const int initial_size = 2 ;
//------------------------------
class iterator
{
public:
int index ;
myvector& parent ;
iterator( myvector& parent_arg, int index_arg ) : parent( parent_arg) , index( index_arg )
{
}
int& operator*()
{
//fill in code !!
}
iterator& operator++()
{
//fill in code !!
}
iterator& operator++(int)
{
iterator* temp = this;
index++;
return *temp ;
}
bool operator!=(const iterator &rv) const
{
return index != rv.index;
}
};
//------------------------------
myvector()
{
holder = new int[initial_size] ;
capacity = initial_size ;
currentIndex = -1 ;
size = 0 ;
}
~myvector()
{
delete[] holder ;
}
iterator begin()
{
//fill in code !!
}
iterator end()
{
//fill in code !!
}
void push_back( int value )
{
if ( full() )
{
cout << "Capacity is full," << endl ;
capacity = capacity*2 ;
int* newArray = new int[capacity] ;
for( int i1=0 ; i1<capacity; i1++ )
{
newArray[i1] = holder[i1] ;
}
delete[] holder ;
holder = newArray ;
currentIndex++ ;
holder[ currentIndex ] = value ;
size++ ;
}
else
{
currentIndex++ ;
holder[ currentIndex ] = value ;
size++ ;
}
}
void print()
{
cout << "Size:" << size << endl ;
cout << "Capacity:" << capacity << endl ;
for( int i1=0 ; i1<size ; i1++ )
{
cout << holder[i1] << " " << endl ;
}
}
bool full()
{
if( size >= capacity )
return true ;
else
return false ;
}
int& operator [](int index_arg)
{
//fill in code !!
}
};
//--------------------------------------------------------------------------------------------
int main()
{
myvector myvectorObject ;
myvectorObject.push_back(100) ;
myvectorObject.push_back(200) ;
cout << "Pushed 2 elements already." << endl ;
//myvectorObject.push_back(300) ;
//myvectorObject.print() ;
//cout << myvectorObject[0] << " " << myvectorObject[1] << endl ;
//Use iterator to go through the elements
myvector::iterator iter1 = myvectorObject.begin() ;
myvector::iterator end_iter1 = myvectorObject.end() ;
for ( ; iter1 != end_iter1 ; iter1++ )
{
cout << *iter1 << endl ;
} //for
return 0;
}
1) "vector1.cpp"
#include <iostream>
#include <vector>
using namespace std;
//--------------------------------------------------------------------------------------------
int main()
{
vector<int> myvectorObject ;
myvectorObject.push_back(100) ;
myvectorObject.push_back(200) ;
cout << "Pushed 2 elements already." << endl ;
//Use array like syntax to go through elements
for ( int i1=0 ; i1 < myvectorObject.size() ; i1++ )
{
cout << *iter1 << endl ;
} //for
//Use iterator to go through the elements
vector<int>::iterator iter1 = myvectorObject.begin() ;
vector<int>::iterator end_iter1 = myvectorObject.end() ;
for ( ; iter1 != end_iter1 ; iter1++ )
{
cout << *iter1 << endl ;
} //for
return 0;
}
//--------------------------------------------------------------------------------------------
2) myvector.cpp
#include <iostream>
#include <vector>
using namespace std;
//copy constructor
// overflow
//overloaded operator
//--------------------------------------------------------------------------------------------
class myvector
{
public:
int* holder ;
int size ;
int capacity ;
int currentIndex ;
const int initial_size = 2 ;
//------------------------------
class iterator
{
public:
int index ;
myvector& parent ;
iterator( myvector& parent_arg, int index_arg ) : parent( parent_arg) , index( index_arg )
{
}
int& operator*()
{
return parent[index]; // why do we return this?
}
iterator& operator++()
{
iterator* temp = this;
index++;
return *temp ;
}
iterator& operator++(int)
{
iterator* temp = this;
index++;
return *temp ;
}
bool operator!=(const iterator &rv) const
{
return index != rv.index;
}
};
//------------------------------
myvector()
{
holder = new int[initial_size] ;
capacity = initial_size ;
currentIndex = -1 ;
size = 0 ;
}
~myvector()
{
delete[] holder ;
}
iterator begin()
{
return iterator( *this , 0 ) ;
}
iterator end()
{
return iterator( *this , size ) ;
}
void push_back( int value )
{
if ( full() )
{
cout << "Capacity is full," << endl ;
capacity = capacity*2 ;
int* newArray = new int[capacity] ;
for( int i1=0 ; i1<capacity; i1++ )
{
newArray[i1] = holder[i1] ;
}
delete[] holder ;
holder = newArray ;
currentIndex++ ;
holder[ currentIndex ] = value ;
size++ ;
}
else
{
currentIndex++ ;
holder[ currentIndex ] = value ;
size++ ;
}
}
void print()
{
cout << "Size:" << size << endl ;
cout << "Capacity:" << capacity << endl ;
for( int i1=0 ; i1<size ; i1++ )
{
cout << holder[i1] << " " << endl ;
}
}
bool full()
{
if( size >= capacity )
return true ;
else
return false ;
}
int& operator [](int index_arg)
{
return holder[index_arg] ;
}
};
//--------------------------------------------------------------------------------------------
int main()
{
myvector myvectorObject ;
myvectorObject.push_back(100) ;
myvectorObject.push_back(200) ;
cout << "Pushed 2 elements already." << endl ;
//myvectorObject.push_back(300) ;
//myvectorObject.print() ;
//cout << myvectorObject[0] << " " << myvectorObject[1] << endl ;
//Use iterator to go through the elements
myvector::iterator iter1 = myvectorObject.begin() ;
myvector::iterator end_iter1 = myvectorObject.end() ;
for ( ; iter1 != end_iter1 ; iter1++ )
{
cout << *iter1 << endl ;
} //for
return 0;
}