線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2129
推到 Plurk!
推到 Facebook!

宣告動態三維陣列

尚未結案
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-04 12:51:52 IP:203.64.xxx.xxx 未訂閱
經過爬文後 找到一篇文章 討論到宣告動態三維陣列  小弟依樣畫葫蘆,想要建立三維陣列  以下是小弟的code
int i,j,k;
       vector  aStack(i); //一維
       vector >  sort_buf(i,vector(j));//二維
       vector > > long_buf(i,vector(j),vector(k));//三維
一維ok 二維ok 可是三維出現error 說"can not find a match for vector...." 想請問各位先進 如果想用vector,如何宣告三維陣列呢?? 如果無法的話,小弟就只好用指標的用法(也是參考板內的文章) 謝謝
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-04 13:54:17 IP:211.76.xxx.xxx 未訂閱
yjalex你好:     要注意vector的constructor是不接受三個參數的。而接受兩個參數時,第一個參數代表begin,第二個代表end。(你的二維陣列可能會出問題)建議你用vector的default constructor,再用resize來建構大小。        另外以下是三維陣列的宣告  
 
//---------------------------------------------------------------------------
#include 
using namespace std;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
vector   >   > Data;
}
//---------------------------------------------------------------------------    
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-05 13:39:47 IP:203.64.xxx.xxx 未訂閱
謝謝回答 但 小弟看完後仍有問題
using namespace std;
這是必要的嗎?? 另外 resize是個function嗎?? 如何使用??(這小弟先再查查)
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-05 13:52:43 IP:203.64.xxx.xxx 未訂閱
查到了resize的用法 但 小弟的array是固定的 如果是這樣子的話,要如何設呢??
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-05 18:00:43 IP:211.76.xxx.xxx 未訂閱
yjalex你好:     如果是要靜態的三維陣例(5x6x7),可以參考下面的程式碼: #include  using namespace std; void __fastcall TForm1::Button1Click(TObject *Sender) { vector data; data.resize(5*6*7); short (*parray)[6][7]; *(short**)&parray = data.begin(); parray[0][0][0] = 2; //第一個元素 //... //... parray[4][5][6] = 100; //最後一個元素 } parray本身不是陣列,而是一個指向三維陣列的指標。他是以vector當作空間,自已則提供了三維陣列的介面。 另外using namespace std是必要的,詳細可以尋找站上有關namespace的討論。 發表人 - pwipwi 於 2004/11/05 18:02:09
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-10 15:11:53 IP:203.64.xxx.xxx 未訂閱
謝謝回答
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-12 09:00:54 IP:203.64.xxx.xxx 未訂閱
拍謝,又來請問pwipwi大下列你寫的程式碼的意思
short (*parray)[6][7];
*(short**)&parray = data.begin();
在上文你說 parray是指標,可是上面的程式碼 小弟沒看到類似宣告的動作 另,能否指導小弟,那篇文章對指標的了解有幫助的 謝謝
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-12 15:07:07 IP:211.76.xxx.xxx 未訂閱
下面是宣告parray為一個指向二維陣列的指標。    short (*parray)[6][7];    可以參考以下的程式碼:  
     short array[5][6][7];
short (*parray)[6][7] = array;    array[0][0][0] = 1;     //
parray[0][0][0] = 1;    // 這兩行的動作是等效的
yjalex
一般會員


發表:3
回覆:8
積分:2
註冊:2002-11-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-15 15:01:26 IP:203.64.xxx.xxx 未訂閱
再請教pwipwi大
parray[0][0][0] = 2; //第一個元素
//...
//...
parray[4][5][6] = 100; //最後一個元素
}
因為小弟是利用fread將畫素值填到parray內
fpt=fopen(file_name.c_str(),"r");
fseek(fpt,offset,SEEK_SET);
fread(short_buf,128*128,1,fpt);  //short_buf就是parray
fclose(fpt);
而不是一個一個值來填 當小弟利用fread讀時,short_buf卻沒值 等問小弟要如何讓值填入呢?? ps這個須要新開主題嗎??,若要,小弟再新開
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-15 18:15:23 IP:211.76.xxx.xxx 未訂閱
yjalex你好:        請問你說的"short_buf卻沒值"是指什麼呢?是值沒有讀入嗎?        以你放上的程式來看,應該是可以讀入的... 可能需要你詳細的
系統時間:2024-11-23 5:11:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!