动态开辟二维数组,方法1:用new在堆上开辟;方法2:用vector开辟。
一:C++ new 法
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
int **element = NULL;
cin>>row
>>col;
//动态开辟数组
element = new int *[row];
for (int i = 0; i < row; i++)
{
element[i] = new int[col];
}
//输入数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cin>>element[i][j];
}
}
//输出数组
cout<<endl;
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<element[i][j];
}
cout<<endl;
}
}
关键之处用红笔标绘出来了!大家肯定一看就懂了!
但是,有时对于新手来说,确实很懵懂的。开辟一维数组是何等简单,但是二维数组还是用开辟一维数组的思想!
程序不足之处是没有销毁开辟的空间!那大家在看。看销毁的代码吧!
//销毁空间
for (i = 0; i < row; i++)
{
delete []element[i];
element[i] = NULL;
}
delete []element;
element = NULL;
这是销毁开辟的空间的代码!
用new在堆上开辟的空间,必须要用delete释放了,不然要出现内存泄露了!
二:vector法
学习C++,就不得不学习STL了。用vector开辟二维数组也不失为一个好办法!
首先看一段代码!
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void main()
{
int row, col;
cout<<"请输入行列值:";
cin>>row
>>col;
vector<vector<int> > test(row, vector<int>(col)); //声明一个二维数组,注意这里的空格不能少
//初始化,其实不初始化也是可以的,vector默认是0
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
test[i][j] = 0;
}
}
cout<<endl;
//输出值
for (i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout<<setw(5)<<test[i][j];
}
cout<<endl;
}
//输出行列值
cout<<"行:"<<test.size()<<endl;
cout<<"列:"<<test[1].size()<<endl;
}
编译时两次调用vector的构造函数对象test,第一次调用构造一个无名的含有col个0的vector<int>对象.
第二次调用构造函数,以这个无名向量为初始值初始化它的row个元素!
转自:http://blog.youkuaiyun.com/vipygd/article/details/5909817