#include"iterator.h"
template <class T>
class vector
{
protected:
iterator start;
iterator finish;
iterator end_of_storage;
protected:
typedef T value_type;
typedef value_type* iterator;
typedef value_type& reference;
typedef size_t size_type;
public:
vector():start(0),finish(0),end_of_storage(0)
{}
vector(size_type n,const value_type& value)
{
start=(iterator)malloc(sizeof(iterator)*(n+1));
iterator first=start;
while(n--)
{
*first=value;
++first;
}
finish=first;
end_of_storage=finish;
}
vector(vector<T> &x)
{
start=(iterator)malloc(x.size());
iterator first1=start;
iterator first2=x.start;
while(first2!=x.finish)
{
*first1++=*first2++;
}
finish=first1;
end_of_storage=finish;
}
~vector()
{
iterator first=start;
iterator tmp=first;
while(first!=end_of_storage)
{
++tmp;
delete(first);
first=tmp;
}
delete(first);
first=NULL;
}
public:
iterator begin(){return start;}
iterator end(){return finish;}
size_type size(){return finish-start+1;}
size_type max_size(){return end_of_storage-start+1;}
size_type capacity(){return end_of_storage-start+1;}
bool empty(){return start==finish;}
bool full(){return finish==end_of_storage;}
void copy(iterator position,iterator first,iterator last)
{
if(position==first) return;
size_type n=last-first;
if(position<first||position>last)
{
iterator tmp=position;
iterator it=first;
iterator next=NULL;
while(it!=last)
{
next=it;
*tmp++=*it++;
delete(next);
}
}
else
{
it=last;
tmp=position+n;
while(it!=first)
{
next=it;
*tmp--=*it--;
delete(next);
}
*tmp=*it;
delete(it);
}
// first=position;
// last=first+n;
}
void insert(iterator position,const value_type& value)
{
iterator tmp=start;
while(tmp!=position)
++tmp;
size_type n=tmp-start;
if(full())
{
iterator first=(iterator)malloc(size()*2);
copy(first,start,--tmp);
*(first+n)=value;
copy(first+n+1,tmp,last);
n=last-start;
start=first;
last=start+n+1;
}
else
{
copy(++tmp,position,last);
*position=value;
++last;
}
}
void erase(value_type &value)
{
iterator position=start;
while(position!=last&&*position!=value)
++position;
if(position==last) return;
copy(position,++position,last);
--last;
}
void push_back(value_type value){insert(last,value);}
void pop_back(){}
value_type operator [](int i)
{
iterator tmp=start;
while(i--)
--tmp;
return *tmp;
}
void resize(){}
void clear(){}
};
http://blog.csdn.net/bichenggui/archive/2009/06/22/4289627.aspx