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

来源:互联网 发布:json转java实体对象 编辑:程序博客网 时间:2024/05/20 09:27

上一篇提到了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;}


0 0
原创粉丝点击