天天看點

C++ 數組模闆類的實作 DynamicArray

僅供參考,不準粘貼複制交作業,謝謝配合

C++ 數組模闆類的實作 DynamicArray

(要交的話,最起碼稍微改改好不好!)

#include <iostream>

#include <string>

using namespace std;

class DynamicArray

{

public:

DynamicArray(int aSize=10)

{

elem=new int[m_isize];

m_ilength=0;

m_isize=10;

}

~DynamicArray()

{

delete []elem;

m_ilength=0;

m_isize=0;

}

   DynamicArray(const DynamicArray &aRef) 

   {

  m_ilength=aRef.m_ilength;

  m_isize=aRef.m_isize;

  if (aRef.elem)

  {

      elem=new int[m_isize];

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

      {

            elem[i]=aRef.elem[i];

       }   

  }

   }

   void assign(const DynamicArray &aRef)// 用一個動态數組的對象的值去修改另外一個對象

   {

  int *elemtent;                            //防止空間太大或太小

  elemtent=new int[m_isize];

  delete[]elem;

  elem=elemtent;

  while(aRef.elem)

         (++*elem)=( ++ *aRef.elem );    

  m_ilength=aRef.m_ilength;

  m_isize=aRef.m_isize;   

   }

   void append(int aValue)//數組最後插入元素

   {

if(m_ilength >= m_isize)                        //資料存儲滿

    {

        int * elemtent;                                               //申請新空間

        elemtent = new int[m_isize+10];

        for(int i = 0;i < m_ilength;i++)            //将原來資料轉移到新空間

        {

            elemtent[i] = elem[i];

        }

        delete []elem;                           //銷毀原來的空間

        elem= elemtent;                      //指向新申請的空間

        m_isize = m_isize + 10;

    }

    elem[m_ilength] = aValue;

    m_ilength++;

}

    bool remove(int aIndex) //删除下标為aIndex的數組元素

{

    if(aIndex<0||aIndex>m_ilength)

return false;

for (int i=aIndex;i<m_ilength-1;i++)

elem[i]=elem[i+1];

m_ilength=m_ilength-1;

m_isize=m_isize;

return true ;

}

   bool insert( int aIndex, int aVal )//在aIndex位置的元素後面插入新元素

   { 

  if(aIndex<0||aIndex>=m_ilength)

return false;

      if(m_ilength >= m_isize)                        //資料存儲滿

      {

           int *elemtent;                                                //申請新空間

           elemtent = new int[m_isize+10];

           for(int i = 0;i < m_ilength;i++)            //将原來資料轉移到新空間

           {

                 elemtent[i] = elem[i];

            }

            delete []elem;                           //銷毀原來的空間

            elem = elemtent;                      //指向新申請的空間

            m_isize = m_isize + 10;

    }

    for(int i =  m_ilength - 1; i > aIndex;i--)     //循環前移

    {

        elem[i + 1] = elem[i];

    }

     elem[aIndex + 1] = aVal;                     

     m_ilength++;

    return true;

   }

   bool remove(int aIndex, int aValue) //從下标為aIndex的元素開始查找,删除所有值為aValue的元素

   {

    if(aIndex<0||aIndex>=m_ilength)

return false;

    int j=0;

    int i=aIndex;

for (i;elem[i];i++)

{

    if(elem[i]==aValue)

                   elem[i]=elem[i+1];

j++;  

}

m_ilength-=j;

m_isize=m_isize;

return true;  

   }

    const int *begin() const //傳回第一個數組元素的指針

    {

     return elem; 

    }

const int *end() const //傳回最後一個元素的指針

{

    return &elem[m_ilength-1];

}

   int at(const int aIndex) const //傳回下标為aIndex的數組元素

   {

  if(elem&&aIndex<m_ilength)

  return elem[aIndex];  

  return 0;

   }

   void display()

   {

         while(elem)

{

    cout<<elem;

elem++;

}  

   }

private:

int *elem;    

int m_ilength;      //數組中元素的個數

int m_isize;         //數組的總長度

};

繼續閱讀