C++中二维数组不能动态生成么?
比如有两个字符串s,t
int lenghofS=strlen(s);
int lenghofT=strlen(t);
我想生成一个以s,t的长度为行,宽的二维数组
int matrix[lenghofS+1][lenghofT+1];
或者
int*matrix=new int[lenghofS+1][lenghofT+1];
好象都是不行的
请问有什么方法么?
谢!
问题点数:20、回复次数:8Top
1 楼llf_hust()回复于 2005-09-24 00:07:57 得分 4
#include<iostream.h>
#include<string.h>
int main()
{
char *s = "abcd", *t = "hustwuhan";
int i,**matrix,lenghofS,lenghofT;
lenghofS = strlen(s);
lenghofT = strlen(t);
matrix = new int*[lenghofS+1];
for(i=0; i < lenghofS+1; i++)
matrix[i] = new int[lenghofT+1];
for(i=0; i < lenghofS+1; i++)
delete []matrix[i];
delete []matrix;
return 0;
}Top
2 楼fiftymetre(50米深蓝)回复于 2005-09-24 00:17:12 得分 0
//测试通过!!
typedef float F8[8];
float (*pF8)[8];
float *pf;
F8* pFF=new F8[100];
pF8=new float[32][8];
pf=new float[32*8];
pF8=(F8*)pf;
pF8=(float(*)[8])pf;
Top
3 楼fiftymetre(50米深蓝)回复于 2005-09-24 00:17:58 得分 4
再一种
可以有很多方法,殊途同归。
无论是几维数组,在内存空间都是一个个连续存放的,都可以看成一维的。
所以可以这样:
int * arrayDynamic = new int(row*col);//row,col分别是你要生成的数组的行列数
然后就可以像数组一样使用了。
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
arrayDynamic[i*col+j]=i+j;
cout<<arrayDynamic[i*col+j]<<endl;
}
}
不过有个不好的地方是,因为arrayDynamic是指针,所以用arrayDynamic[i]可能会超出你想要得范围之外,到达数组以外的内存空间。因此有必要检查坐标是否越界。
可以了吗呵呵
Top
4 楼zhouhuahai(道号"虚无")回复于 2005-09-24 09:09:57 得分 4
楼上的根本就是没回答到点子上,第一个只有一个是变量,另一个却还是常量.
int **matrix;
matrix = new int*[lenghofS+1];
for(int i = 0 ; i<lenghofS+1; i++)
matrix = new int[lenghofT];
.............
方法二:
vector<vector<int> > matrix;
这里matrix可以有任意个元素.
Top
5 楼zhouhuahai(道号"虚无")回复于 2005-09-24 09:51:57 得分 0
回复人: fiftymetre(离人行.丽人涕) ( ) 信誉:100 2005-09-24 00:17:00 得分: 0
再一种
可以有很多方法,殊途同归。
无论是几维数组,在内存空间都是一个个连续存放的,都可以看成一维的。
所以可以这样:
int * arrayDynamic = new int(row*col);//row,col分别是你要生成的数组的行列数
然后就可以像数组一样使用了。
严重错误!
int * arrayDynamic = new int(row*col);
这里的arrayDynamic new了一个int指针变量,其所指向的内容为row*col
Top
6 楼ratzip(小小)回复于 2005-09-24 09:53:53 得分 3
int i, line,row;
int **p;
cout<<"please input line number";
cin>>line;
p=new int *[line];
cout<<"please input row number";
cin>>row;
for(i=0;i<row;i++)
p[i]=new int [row];
//以上构造2维数组
for(i=0;i<row;i++)
delete[] p[i];
delete[] p;
p=NULL;
//释放空间
Top
7 楼foochow(无聊,灌水......)回复于 2005-09-24 09:54:34 得分 0
路过JFTop
8 楼smily2004()回复于 2005-09-24 10:33:27 得分 5
#include <iostream>
using namespace std;
template <class T>
void dynamic_2d_array( T ** &x, int rows, int cols)
{
// Create 2-D array
// create row pointer
x = new T *[rows];
// allocate memeory for every row
for (int i=0; i<rows; ++i)
x[i] = new T [cols];
}
template <class T>
void del_2d_array( T ** &x, int rows)
{
// delete 2-D array x
// dealocate memory of every row
for (int i=0; i<rows; ++i)
delete [] x[i];
// delete row pointer
delete [] x;
x = 0;
}
int main()
{
double **array_2d;
int row = 4;
int col = 3;
dynamic_2d_array(array_2d, row, col);
for(int i=0; i!=4; ++i){
for(int j=0; j!=3; ++j){
array_2d[i][j] = (double)(i+j);
cout << array_2d[i][j] << " ";
}
cout << endl;
}
del_2d_array(array_2d, row);
}
Top




