C++小题(2)

使用命名空间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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值