您的位置:首页 > 其它

动态内存分配,创建一个对每一行列数不同(元素个数不同)的二维数组!

2017-02-26 16:37 357 查看
上一篇提到了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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐