Data Structures (Weiss) Chapter 3: Vector C++

//

//  main.cpp

//  Data Structure TRY1

//

//  Created by zr9558 on 6/7/13.

//  Copyright (c) 2013 zr9558. All rights reserved.

//



// Data Structure C++, Weiss, Vector, P.81, 82


#include <iostream>

using namespace std;


template < typename Object>

class Vector

{

public:

   explicit Vector(int initSize=0): theSize(initSize), theCapacity(initSize+SPARE_CAPACITY)

    {

        objects=new Object[theCapacity];

    }

    

    Vector(const Vector &rhs): objects(NULL) {operator=(rhs);}

    ~Vector(){delete []objects;}

    

   const Vector &operator = (const Vector &rhs) // define the operator =

    {

        if(this!=&rhs)  // we need this assumption to avoid this = itself

        {

           delete []objects;

            theSize=rhs.size();

            theCapacity=rhs.theCapacity;

            

            objects =new Object[ capacity()];

            

           for(int k=0; k<size();++k) objects[k]=rhs.objects[k];

            

        }

       return *this;

    }

    

   void resize(int newSize)

    {

       if( newSize>theCapacity)

            reserve( newSize*2+1);

        theSize=newSize;

    }

    

   void reserve(int newCapacity)

    {

       if( newCapacity< theSize)return;

        

        Object *oldArray=objects;

        

        objects=new Object[newCapacity];

       for(int k=0; k<theSize; ++k)

            objects[k]=oldArray[k];

        

        theCapacity=newCapacity;

       delete [] oldArray;

    }

    

    

    Object &operator[](int index)

    {return objects[index];}

   const Object &operator[](int index)const

    {return objects[index];}

    

    

   bool empty()const

    {return size()==0;}

   int size()const

    {return theSize;}

   int capacity()const

    {return theCapacity;}

    

   void push_back(const Object &x)

    {

       if( theSize==theCapacity)

            reserve(2*theCapacity+1);

        objects[theSize++]=x;

    }

    

   void pop_back( ) { theSize--;}

    

   const Object &back()const

    {return objects[ theSize-1];}

    

   typedef Object *iterator;

   typedefconst Object *const_iterator;

    

    iterator begin()

    {return &objects[0];}

    const_iterator begin()const

    {return &objects[0];}

    iterator end()

    {return &objects[theSize];}

    const_iterator end()const

    {return &objects[theSize];}


   enum{  SPARE_CAPACITY=16};

    

private:

   int theSize;

   int theCapacity;

    Object *objects;

};




int main()

{


    cout<<"the class Vector"<<endl;

    

    Vector<int> ivec;

    

   for(int i=0; i<20; ++i)

        ivec.push_back(i);

    

    cout<<ivec.size()<<" "<<ivec.capacity()<<endl;

    

   for( Vector<int>::iterator iter=ivec.begin(); iter!=ivec.end(); ++iter)

        cout<<*iter<<" ";

    

    cout<<endl;

    

    

    return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值