64,649
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
//得到最小值
int getmin(int a, int b) {
return a > b ? b : a;
}
//创建二维数组,并赋值(为了简单,赋值为int类型)
template<class t>
t** create2darray(int row, int column) {
int** x = new t* [row];
for (int i = 0; i < row; i++)
x[i] = new t[column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++)
x[i][j] = 10 * (i + 1) + j + 1;
}
return x;
}
//释放二维数组
template<class t>
void delete2darray(t** x, int row) {
for (int i = 0; i < row; i++)
delete[]x[i];
delete[]x;
}
template<class t>
t** change2darray(t**& x, int old_row, int old_column, int new_row, int new_column) {
int num1 = getmin(old_row, new_row);//最多复制num1行
int num2 = getmin(old_column, new_column);//最多复制num2列
t** temp = 0;
for (int i = 0; i < num1; i++)
copy(x[i], x[i] + num2, temp[i]);
delete2darray(x, old_row);
return temp;
}
//打印二维数组
template<class t>
void print2darray(t** x, int row, int column) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++)
cout << x[i][j] << '\t';
cout << endl;
}
cout << endl;
}
int main() {
int old_row = 3;
int old_column = 2;
int new_row = 4;
int new_column = 3;
int** p = create2darray<int>(old_row, old_column);//创建一个三行二列的二维数组,p指向该二维数组
print2darray(p, old_row, old_column);//打印
int** q = change2darray(p, old_row, old_column, new_row, new_column);//改变数组大小,为四行三列,令q指向新数组
//print2darray(q, new_row, new_column);//打印新数组
//delete2darray(p, new_row);//把p释放
}
#include<iostream>
using namespace std;
//得到最小值
int getmin(int a, int b) {
return a > b ? b : a;
}
//创建二维数组,并赋值(为了简单,赋值为int类型)
template<class t>
t** create2darray(int row, int column) {
int** x = new t*[row];
for (int i = 0; i < row; i++)
x[i] = new t[column];
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++)
x[i][j] = 10 * (i + 1) + j + 1;
}
return x;
}
//释放二维数组
template<class t>
void delete2darray(t** x, int row) {
for (int i = 0; i < row; i++)
delete[]x[i];
delete[]x;
}
template<class t>
t** change2darray(t**& x, int old_row, int old_column, int new_row, int new_column) {
int num1 = getmin(old_row, new_row);//最多复制num1行
int num2 = getmin(old_column, new_column);//最多复制num2列
//t** temp = 0;这是一个空指针,直接使用它的话,copy函数会报错
t** temp = create2darray<int>(new_row, new_column);//于是这里新建一个新的二维数组
for (int i = 0; i < num1; i++)//把旧的数据拷贝过去
copy(x[i], x[i] + num2, temp[i]);
delete2darray(x, old_row);//当你删除了旧的二维数组后,mian函数中的p就相当于失效了
return temp;
}
//打印二维数组
template<class t>
void print2darray(t** x, int row, int column) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < column; j++)
cout << x[i][j] << '\t';
cout << endl;
}
cout << endl;
}
int main() {
int old_row = 3;
int old_column = 2;
int new_row = 4;
int new_column = 3;
int** p = create2darray<int>(old_row, old_column);//创建一个三行二列的二维数组,p指向该二维数组
print2darray(p, old_row, old_column);//打印
int** q = change2darray(p, old_row, old_column, new_row, new_column);//改变数组大小,为四行三列,令q指向新数组
print2darray(q, new_row, new_column);//打印新数组
//↑查看结果
//delete2darray(p, new_row);//把p释放
//↑由于p已经失效(见change2darray内的我的注释),所以在这里该被释放的不是p,而是q
delete2darray(q, new_row);//把p释放
}
结果如图: