STL vector 虹软部分收藏夹

 
#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(){}

};

 

www.sgi.com/stl

http://blog.csdn.net/bichenggui/archive/2009/06/22/4289627.aspx

http://www.cppblog.com/converse/category/2256.html

http://www.68ps.com/

http://www.boost.org/

http://www.cppblog.com/dyj057/archive/2005/09/20/346.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值