注意:

动态数组,只能赋给动态数组,

 T* & arr 指针引用

不一定就是往大了改,还有可能往小的改变,取新旧长度的最小值,来确定复制的数量

新的长度需要判断是否大于0

#include <iostream>
#include <cassert>
#include <algorithm>

#define min(a,b) a>b?b:a;

using std:: cin;
using std:: cout;
using std:: endl;
using std:: copy;
//T* & arr 指针引用
template <class T>
void Change_Array_Length(T* & arr,int oldlength,int newlength)
{
//不一定就是往大了改,还有可能往小的改变
assert(newlength > 0);
T *temp = new T[newlength];
int number = min(oldlength, newlength);
//copy在std命名空间下
copy(arr,arr+number,temp);
delete[] arr;
//temp 指向动态数组,则要求arr,也是动态数组
arr = temp;

}
int main()
{
//temp 指向动态数组,则要求传的指针也是动态数组
int *p = new int [8];
for (int i = 0; i < 8; i++)
p[i] = i;
Change_Array_Length(p, 8, 4);

for(int i=0;i<8;)
cout << p[i++] << endl;

return 0;
}