C++ 数组模板类的实现 DynamicArray

来源:互联网 发布:陪吃陪喝陪玩的软件 编辑:程序博客网 时间:2024/06/16 03:59

仅供参考,不准粘贴复制交作业,谢谢配合微笑(要交的话,最起码稍微改改好不好!)

#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;         //数组的总长度
};


0 0
原创粉丝点击