使用命名空间new和delete,cin和cout,写一个动态数组,通过输入,添加元素,满了就*2扩容
#include <iostream>
using namespace std;
namespace newArr
{
int *pArr = NULL;//指针:首地址
int length=0; //当前元素个数
int maxSize = 5; //当前最大容量
int *getMemory();//申请内存
int *addElement(int val); //添加元素
int *extMemory();//扩展内存
void showData();//输出数据
}
//申请内存
int *newArr::getMemory()
{
pArr = new int[maxSize];
memset(pArr,0,sizeof(int)*maxSize);//记录
return pArr;
}
//添加元素
int *newArr::addElement(int val)
{
length++;
if (length>maxSize)//大了装不下
{
extMemory();//调用扩容函数
}
pArr[length - 1]=val;//不需要扩容直接添加,-1是要从0开始
return pArr;
}
//扩展内存
int *newArr::extMemory()
{
cout << "***扩容***" << endl;
//定义规则
maxSize *= 2;//满了就*2扩容
//申请内存
int *pTemp = pArr;
//保存原来的首地址
getMemory();
//拷贝内存
for (int i = 0; i < maxSize/2; i++)
{
pArr[i] = pTemp[i];
}
//释放原来的内存
delete[]pTemp;
pTemp = NULL;
return pArr;
}
//输出数据
void newArr::showData()
{
cout << hex << "当前动态数组首地址:OX-" << pArr << endl;
cout <<dec<< "当前数组最大容量:" << maxSize << endl;
cout << dec << "当前数组元素个数:" << length << endl;
cout << "当前元素依次:";
for (int i = 0; i < length; i++)
{
if (!(i%5))
{
cout << endl;
}
cout << pArr[i] << "";
}
cout << endl << endl;
}
using namespace newArr;
int main()
{
int num = 0;
newArr::getMemory();
for (int i = 0; i < 12; i++)
{
cout << "添加:";
cin >> num;
newArr::addElement(num);
newArr::showData();
}
return 0;
}