方法1、C++使用vector方便生成:?
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
int i,
j,
m, //行数
n; //列数
cout << "input value for m,n:";
cin>>m>>n;
//注意下面这一行:vector<int后两个">"之间要有空格!否则会被认为是重载">>"。
vector<vector<int> > vecInt(m, vector<int>(n));
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
vecInt[i][j] = i*j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
cout<<setw(5)<<vecInt[i][j]<<":"<<setw(9)<<&vecInt[i][j];
cout<<endl;
}
return 0;
}
?
方法2:用vector可以,用裸指针也可以创建,只不过要小心使用,因为很容易造成
内存泄露:
int main()
{
//类型定义,将int*指针定义成Row
typedef int* Row;
int row, col;
cin >> row >> col;
Row* rows = new Row[row];
for(int i = 0; i < row; ++i)
{
//有小(),直接将各项初始化为0
//rows[i] = new int[col]();
rows[i] = new int[col];
}
for(int i = 0; i < row; ++i)
{
delete [] rows[i];
}
delete [] rows;
}
?
?
3、C++动态申请多维数组
在C++中为数组动态分配内存的格式如下:
第一步:声明
type (p)[常量1][常量2]...[常量n];
第二步:申请
p=new type[x][常量1][常量2]...[常量n];
说明:先定义一个n维的数组指针,其中p是一个指针变量,x是一个整形变量,
然后申请一个第一维为x的n+1维数组,记住只有第一维x可变。
举例:
1、动态申请一个一维数组
int *p;
int x;
cin>>x;
p=new int[x];
2、动态申请一个二维整型数组
int (*p)[10];
int x;
cin>>x;
p=new int[x][10];
若执行这段程序,给x输入3,则相当于定义一个3行10列的
一个二维数组。实际是申请3102个存储单元,并把其首
地址返回给p,通过p来操纵这个动态数组。
3、动态申请一个三维数组
int (*p)[8][6];
int x;
cin>>x;
p=new int[x][8][6];
注意:
1、申请成功与否,看p的值,若p的值为NULL,则说明申请不成功,
反之,则申请成功。
2、动态申请的存储单元,使用之后应及时返还给系统,方法是:
delete p;即可。
(new 和 delete 、 new[] 和 delete[] 对应使用)
?