仅供参考,不准粘贴复制交作业,谢谢配合(要交的话,最起码稍微改改好不好!)
#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; //数组的总长度
};