这一题有点麻烦,需要判断新的长度是否大于原来的长度,我只做了修改行数,列数如果哪位做出来的话请在评论发一下,我会署上你的名字添加到文章里的。
**仅给有需要的人以参考,如有错误请纠正我**
#include<iostream>
template<typename T>
void changeLength2D(T ** &ar, int oldLength, int numberOfColumns, int newLength)
{
T ** temp;
if (oldLength > newLength) //判断新的二维数组长度是否比原来的长
{
temp = new T *[newLength]; //这里是oldLength大于newLength
for (int i = 0; i < newLength; i++)
temp[i] = new T[numberOfColumns];
for (int i = 0; i < newLength; i++)
{
for (int j = 0; j < numberOfColumns; j++)
temp[i][j] = ar[i][j];
}
}
else
{ //这里是newLength大于oldLength
temp = new T *[newLength];
for (int i = 0; i < newLength; i++)
temp[i] = new T[numberOfColumns];
for (int i = 0; i < newLength; i++)
{
for (int j = 0; j < numberOfColumns; j++)
{
if (i < oldLength) //我将多出来的内存用15填充了
temp[i][j] = ar[i][j];
else
temp[i][j] = 15;
}
}
}
for (int i = 0; i < newLength; i++) //显示新二维数组里面的值
{
for (int j = 0; j < numberOfColumns; j++)
std::cout << temp[i][j] << " ";
std::cout << std::endl;
}
for (int i = 0; i < oldLength; i++)
delete[] ar[i];
delete[]ar; //delete原来的数组ar
ar = nullptr;
for (int i = 0; i < newLength; i++) //delete新的二维数组temp
delete[] temp[i];
delete[]temp;
temp = nullptr;
}
int main()
{
int ** arr;
arr = new int *[10];
for (int i = 0; i < 10; i++) //new一个新的二维数组
arr[i] = new int[2];
for (int i = 0; i < 10; i++) //给二维数组赋值
for (int j = 0; j < 2; j++)
arr[i][j] = 10;
int newLength = 15; //新的二维数组长度
changeLength2D(arr, 10, 2, newLength);
return 0;
}
P.s:new出来的地址用完之后一定要delete,不然会造成内存泄漏