动态内存分配,创建一个对每一行列数不同(元素个数不同)的二维数组!
上一篇提到了C++中的动态内存机制以及如何动态建立数组,这里给出更具一般性的算法,对一个二维数组,每一行所含元素个数不相同的情况。
#include <bits/stdc++.h>
using namespace std;
template<class T>
bool make2dArray(T ** &arr, int numberOfRows, int arrNumberOfColumns[]) {
//创建一个二维数组
try{
//创建行指针
arr = new T * [numberOfRows];
//为每一行分配空间
for(int i = 0; i < numberOfRows; ++i) {
for(int j = 0; j < numberOfRows; ++j)
arr[i] = new int [arrNumberOfColumns[j]];
}
return true;
}catch (bad_alloc) {
cerr << "Out of memory" << endl;
return false;
}
}
int main() {
int row;
cin >> row;
//存储每一列所含元素的个数
int *col = new int[row];
for(int i = 0 ; i < row; ++i) {cin >> col[i];}
int **arr;
if(make2dArray(arr, row, col)) {
for(int i = 0; i < row; ++i){
for(int j = 0; j < col[i]; ++j) {
//此处可以自己定义元素从控制台输入
arr[i][j] = i + j;
}
}
}
for(int i = 0; i < row; ++i) {
for(int j = 0; j < col[i]; ++j) {
j ? cout << " " << arr[i][j] : cout << arr[i][j];
}
puts("");
}
//最终一定不要忘记释放内存!!!
delete[] col;
for(int i = 0; i < row; ++i) {
delete[] arr[i];
}
return 0;
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: c++语言 如何计算二维数组行数和列数
- 下一篇: 任意行列二维数组C语言实现
