建構動態二維陣列的問題 |
尚未結案
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
本程式建構動態二維陣列時,
編輯時會在float *ptr[i]=new float[m];此行,
產生錯誤的訊息,
為何會有如此現象呢? 請教各位先進. 原始程式:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n,m;
n=StrToInt(Edit1->Text);
float **ptr=new float *[n];
for(int i=0;i
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
不必再重複宣告, float *ptr[i]=new float[m];
用 ptr[i]=new float[m]; 就可以了 請參考
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28485 int i,a,b;
int **ary; a=StrToInt(Edit1->Text);
b=StrToInt(Edit2->Text); ary=new int*[a];
for(i=0; i<a; i ) ary[i]=new int[b]; //就可以配置 ary[a][b] 的二維陣列了 //殺掉的話 for (i=0; i<a; i ) delete[] ary[i];
delete[] ary;
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
引言: 不必再重複宣告, float *ptr[i]=new float[m]; 用 ptr[i]=new float[m]; 就可以了 請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28485 int i,a,b; int **ary; a=StrToInt(Edit1->Text); b=StrToInt(Edit2->Text); ary=new int*[a]; for(i=0; i<a; i ) ary[i]=new int[b]; //就可以配置 ary[a][b] 的二維陣列了 //殺掉的話 for (i=0; i<a; i ) delete[] ary[i]; delete[] ary; *************************** 謝謝您的回應, 不過針對二維陣列有更簡易的宣告方式嗎? 一定要使用迴圈宣告嗎? 如果二維的大小在宣告前已知,可否作一次宣告呢? 您覺得呢? *************************** |
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我是希望由輸入給定二維陣列之大小, 而非真得知道維度,可以直接作宣告, 若像你所言,float ptr[n][m]; 這樣是不行的. 我的目的是希望作一次宣告,而非需要用到迴圈作宣告, 還是這種想法是不可能的呢?TsannTay 你好: 只是提供另外一種想法,參考看看 < class="code"> int m=2; int n=3; int l=0; int i=0; int j=0; int *ptr=new int[m*n]; // 給值 for(i=0; i
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
integrand
一般會員 發表:8 回覆:27 積分:17 註冊:2002-10-22 發送簡訊給我 |
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
引言:我是希望由輸入給定二維陣列之大小, 而非真得知道維度,可以直接作宣告, 若像你所言,float ptr[n][m]; 這樣是不行的. 我的目的是希望作一次宣告,而非需要用到迴圈作宣告, 還是這種想法是不可能的呢?傷腦筋勒,我不知道要怎麼在簡化了。 用 Template 來作的話可以嗎? template <class T〉newAry(T*** ary, int n, int m) { *ary=new T *[n]; for(int i=0; i<n; i ) (*ary)[i]=new T [m]; } void __fastcall TForm1::Button1Click(TObject *Sender) { int n=StrToInt(Edit1->Text), m=StrToInt(Edit2->Text); float **fary=NULL; newAry(&fary, n, m); int **iary=NULL; newAry(&iary, n, m); } 軟還要更軟,我的Artwork http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27674 發表人 - dan59314 於 2003/04/15 18:22:46 |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
引言:#include <vector.h> int m=5,n=4; vector <float> aStack(n); //一維 vector <vector<float>> Array(m, vector<float>(n)); //二維 aStack[2] = 8.5; Array[2][2] = 6.8;ps.大於小於因顯示會有問題,所以必須重打. ************************ 一維宣告的陣列可以使用,但二維不行, 您可以解釋二維宣告那段程式的意思嗎? 請你再幫幫忙.... ************************ |
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
引言: 傷腦筋勒,我不知道要怎麼在簡化了。 用 Template 來作的話可以嗎? template <class T〉newAry(T*** ary, int n, int m) { *ary=new T *[n]; for(int i=0; i<n; i ) (*ary)[i]=new T [m]; } void __fastcall TForm1::Button1Click(TObject *Sender) { int n=StrToInt(Edit1->Text), m=StrToInt(Edit2->Text); float **fary=NULL; newAry(&fary, n, m); int **iary=NULL; newAry(&iary, n, m); } 軟還要更軟,我的Artwork http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27674 發表人 - dan59314 於 2003/04/15 18:22:46 引言: ********************* 對於整數陣列這個方法可行, 但浮點數陣列似乎會有問題. 附上程式碼 template |
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
|
dan59314
中階會員 發表:121 回覆:107 積分:86 註冊:2002-08-16 發送簡訊給我 |
|
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
TsannTay
一般會員 發表:20 回覆:34 積分:10 註冊:2003-04-10 發送簡訊給我 |
我根據brook所提之方式,
將此法測試後,其結果非常滿意. 附上程式,以供參考.(加入兩個Edit,一個Memo及一個Button) void __fastcall TForm1::Button1Click(TObject *Sender)
{
int m,n;
String temp; m=StrToInt(Edit1->Text);
n=StrToInt(Edit2->Text); vector
|
jesson
一般會員 發表:11 回覆:16 積分:5 註冊:2002-04-21 發送簡訊給我 |
引言:引言: #include <vector.h> int m=5,n=4; vector <float> aStack(n); //一維 vector <vector<float>> Array(m, vector<float>(n)); //二維 兩個大於間要加一個空隔,如下面︿的位置. vector <vector<float>︿> Array(m, vector<float>(n)); //二維小弟也Try了brook兄的方法,的確不錯! 但小弟有幾個疑問,想請教一下,這宣告出的陣列示動態配置嗎? 若是動態配置,須delete陣列節省資源時,該如何delete! 直接用delete[] Array(以二維為例),不知何位前輩可否解答 |
brook
資深會員 發表:57 回覆:323 積分:371 註冊:2002-07-12 發送簡訊給我 |
|
800
一般會員 發表:2 回覆:7 積分:1 註冊:2003-04-03 發送簡訊給我 |
|
brant
一般會員 發表:1 回覆:64 積分:23 註冊:2003-04-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |