全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2329
推到 Plurk!
推到 Facebook!

Vector三維陣列動態宣告

尚未結案
typenew
一般會員


發表:8
回覆:17
積分:5
註冊:2004-03-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-03 23:22:48 IP:140.120.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=59126 上面是我查到的相關文章,對於三維陣列的宣告,有提到是用resize(),小弟要宣告一個10*10*10的陣列如下所示:
 vector   >   > Data;
 Data.resize(10);
 for(int i=0;i<10;i  )
 Data[i].resize(10);
 for(int i=0;i<10;i  )
   for(int j=0;j<10;j  )
      Data[i][j].resize(10);
 Data[2][2][2]=10; 
雖然是可以執行存取沒有問題,但是感覺怪怪的,所以想請問不知道這樣是否正確。
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-04 22:30:06 IP:61.64.xxx.xxx 未訂閱
引言: http://delphi.ktop.com.tw/topic.php?topic_id=59126 上面是我查到的相關文章,對於三維陣列的宣告,有提到是用resize(),小弟要宣告一個10*10*10的陣列如下所示:
 vector   >   > Data;
 Data.resize(10);
 for(int i=0;i<10;i  )
 Data[i].resize(10);
 for(int i=0;i<10;i  )
   for(int j=0;j<10;j  )
      Data[i][j].resize(10);
 Data[2][2][2]=10; 
雖然是可以執行存取沒有問題,但是感覺怪怪的,所以想請問不知道這樣是否正確。
這樣宣告是可以的, 還可以簡化為
 vector   >   > Data;
 Data.resize(10);
 for(int i=0;i<10;i  )
 {
   Data[i].resize(10);       for(int j=0;j<10;j  )
      Data[i][j].resize(10);
 }
 Data[2][2][2]=10; 
iq
一般會員


發表:8
回覆:8
積分:3
註冊:2004-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-08 09:25:13 IP:61.222.xxx.xxx 未訂閱
關於這個問題小弟寫了一個練習,但有一點問題想請教 vector < vector > Data,b; Data.resize(3); for(int i=0;i<3;i ) Data[i].resize(4); for (int i=0; i<3;i ) for (int j=0; j<4 ; j ) { //Data[i][j]=(i j); //這樣就沒有問題 b[i].push_back(i j); //這樣會有error ShowMessage(IntToStr(Data[i][j])); } 給值的方式好像就不能用push_back() 不知道這樣是不是有問題?
typenew
一般會員


發表:8
回覆:17
積分:5
註冊:2004-03-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-09 02:22:49 IP:211.76.xxx.xxx 未訂閱
引言: 關於這個問題小弟寫了一個練習,但有一點問題想請教
 
vector < vector > Data,b;
  Data.resize(3);
  for(int i=0;i<3;i  )
    Data[i].resize(4);      for (int i=0; i<3;i  )
  for (int j=0; j<4 ; j  )
  {
    //Data[i][j]=(i j);   //這樣就沒有問題
    b[i].push_back(i j);  //這樣會有error
    ShowMessage(IntToStr(Data[i][j]));
  }
給值的方式好像就不能用push_back() 不知道這樣是不是有問題?
Dear Sir: 那是因為push_back是在後面塞進去i j,依照你的code來說原本是3*4的array,再第二個for迴圈中因為你push四次,所以整個迴圈做完所產生的array是變成3*8的array,故你所push的數值都只在[i][4~7](i=0~2)裡面,ShowMessage出來只會看到"0"。 提外話不知道是不小心還是程式碼真的有錯b[i].push_back(i j);這行的b跟本沒有分配記憶體,就給值當然會有問題。 小弟拙見請多指教。
iq
一般會員


發表:8
回覆:8
積分:3
註冊:2004-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-09 09:39:29 IP:61.222.xxx.xxx 未訂閱
感謝您的回答, 如果照您的說法,就是我resize完後,iterator會移到end的位置上。 如果我再push_back就會往後面加上去。 但是我又試了一下,發現原因好像都出在ShowMessage上, 似乎不能存取Data[i][j]。以下是source code void __fastcall TForm1::Button1Click(TObject *Sender) {      vector < vector > Data; Data.resize(3); for(int i=0;i<3;i ) Data[i].resize(4); for (int i=0; i<3;i ) for (int j=0; j<4 ; j ) { Data[i].push_back(i j); ShowMessage(IntToStr(Data[i][j])); //只要有加這行,就會出現error } Application->Terminate(); }
typenew
一般會員


發表:8
回覆:17
積分:5
註冊:2004-03-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-09 14:54:50 IP:163.28.xxx.xxx 未訂閱
引言: 感謝您的回答, 如果照您的說法,就是我resize完後,iterator會移到end的位置上。 如果我再push_back就會往後面加上去。 但是我又試了一下,發現原因好像都出在ShowMessage上, 似乎不能存取Data[i][j]。以下是source code
void __fastcall TForm1::Button1Click(TObject *Sender)
{      vector < vector < int >  > Data;
  Data.resize(3);
  for(int i=0;i<3;i   )
    Data[i].resize(4);      for (int i=0; i<3;i    )
  for (int j=0; j<4 ;j    )
  {
    Data[i].push_back(i j);
    ShowMessage(IntToStr(Data[i][j])); //只要有加這行,就會出現error
  }      Application->Terminate();    }
Dear Sir: 這程式碼沒問題阿,小弟整個複製上去可以跑阿。請你在Debug看看吧。
系統時間:2024-05-19 19:56:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!