动态内存分配,创建一个对每一行列数不同(元素个数不同)的二维数组!
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;
}
#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;
}
相关文章推荐
- 利用动态内存分配创建一个二维数组
- 用内存申请实现动态二维数组的创建及打印(每行的元素个数不同)
- 为一个二维数组动态分配&释放内存
- 设计一个程序,为二维数组动态的分配内存空间并且释放内存空间;数组元素的赋值结果如下:
- 关于二维数组的动态内存分配的一个比较好的方法
- 动态创建一个与该 vector 对象大小一致的数组,把 vector 对象的所有元素复制给新数组_初学vector对象4
- 二维数组的动态内存分配与析构
- 编写程序从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建与该vector大小一致的数组,把vector对象的所有元素复制给该数组
- 一维数组和二维数组空间的内存动态分配、参数传递
- 一个动态分配二维数组的ANSI&nbsp;C程序
- 创建一个动态的二维数组
- 使用jQuery动态创建一个表格(根据用户输入的内容添加一行数据,并且能逐行删除)
- 内存分配方式(动态/静态)的不同对const变量(全局/局部)访问性的影响
- 编写一个函数,此函数使用动态存储分配来产生一个字符串的副本。例如函数为strclone,则调用p=strclone(str),将会为一个新的字符串分配和str占内存大小相同的一个字符串,并将字符串st
- 动态加载的同一个Label的同一行字体显示不同的颜色
- 一个纠结的c++动态创建二维数组不能用的问题
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 使用JAVASCRIPT动态创建一个Select元素
- 分析了Windows下不同的动态内存分配方式
- 建立一个学生结构数组来记录学生信息(学号ID,姓名和C语言成绩),要求动态建立一个结构数组,数组长度从键盘输入,自行给数组元素赋值并打印学生信息,最后不要忘记释放内存。 结构st