[問題] 用class宣告的方法運算動態陣列

看板C_and_CPP (C/C++)作者 (法國號有氣質)時間10年前 (2015/07/23 00:40), 編輯推噓7(7034)
留言41則, 9人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我在網路上找到用class寫動態陣列的方法了,不過我還是不知道如何傳到另一個 副程式去做運算 @@" 請會的大大指教一下,謝謝! (請看下面的程式碼) 假設要做運算的副程式名稱是cal(),內容就是a矩陣+b矩陣 請問該如何宣告、呼叫、還有寫副程式本身呢? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) #include <iostream> using std::cout; using std::cin; using std::ios; using std::cerr; using std::endl; #include <stdio.h> #include <fstream> using namespace std; using std::ifstream; using std::ofstream; #include <cstdlib> #include <math.h> void read_obstacles(); ifstream inobst("obst.txt", ios::in); //############################################################################## void* malloc2d( int w, int h, int size ) { int j; void **a = (void**) malloc( h*sizeof(void*) + w*h*size ); for( j=0; j<h; j++ ) a[j] = ((char *)(a+h)) + j*w*size; return a; } class Array2D { public: int w, h; int **m; Array2D( int width, int height ) { w = width; h = height; m = (int**)malloc2d(w,h,sizeof(int)); } ~Array2D(){free(m);} }; void main() { Array2D a(3, 5); Array2D b(3, 5); int i, j; for( j=0; j<a.h; j++ ){ for( i=0; i<a.w; i++ ){ a.m[j][i] = j*a.w+i; b.m[j][i] = j*2*b.w+i; } } for( j=0; j<a.h; j++ ) { for( i=0; i<a.w; i++ ) printf( "%i ", a.m[j][i] ); printf( "\n" ); } for( j=0; j<b.h; j++ ) { for( i=0; i<b.w; i++ ) printf( "%i ", b.m[j][i] ); printf( "\n" ); } system("pause"); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.130.48 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1437583227.A.51E.html

07/23 00:51, , 1F
去找一本書把function pass argument的地方看完吧...
07/23 00:51, 1F

07/23 01:16, , 2F
07/23 01:16, 2F

07/23 13:10, , 3F
同樓上講的,你對pass argument還是不夠清楚以外
07/23 13:10, 3F

07/23 13:11, , 4F
你如果想要把2D array做成class,你會想把你這cal()
07/23 13:11, 4F

07/23 13:12, , 5F
做成一個class method
07/23 13:12, 5F

07/23 13:27, , 6F
要不要變成成員倒是不一定
07/23 13:27, 6F

07/23 15:41, , 7F
我在網路上看到有人的建議是:把多維陣列用一維的方
07/23 15:41, 7F

07/23 15:43, , 8F
式傳進副程式,然後在副程式裡再轉成多維陣列下去做
07/23 15:43, 8F

07/23 15:45, , 9F
運算,然後再傳回主程式
07/23 15:45, 9F

07/23 15:46, , 10F
我剛剛有試了一下,在副程式裡可以另外產生新的動態
07/23 15:46, 10F

07/23 15:47, , 11F
陣列,這樣應該可以把原本的多維陣列用一維的方式傳
07/23 15:47, 11F

07/23 15:48, , 12F
進副程式裡,然後轉存到在副程式裡產生的新的動態多
07/23 15:48, 12F

07/23 15:50, , 13F
維陣列,做完運算再傳回主程式
07/23 15:50, 13F

07/23 20:23, , 14F
我給你的建議是 去找primer把C++好好學一學 不要寫成C
07/23 20:23, 14F

07/23 23:32, , 15F
只是我覺得Primer太雜了耶 The C++ Programming Language
07/23 23:32, 15F

07/23 23:32, , 16F
我比較喜歡
07/23 23:32, 16F

07/24 01:43, , 17F
你是要練習還是要用?
07/24 01:43, 17F

07/24 01:43, , 18F
要用的話就用std::vector就好了
07/24 01:43, 18F

07/24 01:44, , 19F
要練習的話也可以去翻vector的實作
07/24 01:44, 19F

07/25 01:36, , 20F
我會再去研究std::vector的。我是要跑數值模擬用的,
07/25 01:36, 20F

07/25 01:38, , 21F
我的程式碼大概都是16000行以上,有時一個case要跑
07/25 01:38, 21F

07/25 01:39, , 22F
一個星期以上。我多年來大部分的變數都是宣告成
07/25 01:39, 22F

07/25 01:40, , 23F
global的,陣列也都是用寫死的,所以我承認我對引數
07/25 01:40, 23F

07/25 01:41, , 24F
還有指標那些東西真的很不熟。我之前的case幾乎都是
07/25 01:41, 24F

07/25 01:42, , 25F
二維的,開180萬個元素大概是極限了,但我現在要跑
07/25 01:42, 25F

07/25 01:43, , 26F
三維的case,陣列的元素個數很容易就破千萬,所以
07/25 01:43, 26F

07/25 01:44, , 27F
陣列寫成死的根本compile就不會過......反正趁這個
07/25 01:44, 27F

07/25 01:45, , 28F
機會把引數還有指標、類別、樣版等東西好好學一下,
07/25 01:45, 28F

07/25 01:46, , 29F
讓自己的程式觀念完整一些,也是好事。感謝大家的建
07/25 01:46, 29F

07/25 01:46, , 30F
07/25 01:46, 30F

07/25 01:49, , 31F
資料量還算正常 (算一下大概 500MB) , 不過程式跑一週...
07/25 01:49, 31F

07/25 01:50, , 32F
看原PO跑數值模擬應該不是CS本科
07/25 01:50, 32F

07/25 01:50, , 33F
是 Alg. 那裡沒弄好 , 還是 O2 沒開 , 還是本來就那麼久?
07/25 01:50, 33F

07/25 01:51, , 34F
畢竟物理現象要算的對才是重要 不過跑一週...
07/25 01:51, 34F

07/25 01:52, , 35F
我跑超過 3 分鐘就受不了要停下來了.. 萬一一週後的結果
07/25 01:52, 35F

07/25 01:52, , 36F
是錯的 , 那不是還要再重跑一週 , 想到都軟了 Orz
07/25 01:52, 36F

07/25 01:53, , 37F
對了 , 有種東西叫 intel library ...
07/25 01:53, 37F

07/25 01:57, , 38F
然後你發的 sample code, 叫 intel library 做比你自己
07/25 01:57, 38F

07/25 01:57, , 39F
寫速度還要快很多。
07/25 01:57, 39F

07/27 13:06, , 40F
你說的是Intel TBB? maa...建議等演算法穩定點再用
07/27 13:06, 40F

07/27 13:06, , 41F
TBB一用下去還挺難除錯的 <==受害者
07/27 13:06, 41F
文章代碼(AID): #1LhyTxKU (C_and_CPP)
文章代碼(AID): #1LhyTxKU (C_and_CPP)