[问题] 用class宣告的方法运算动态阵列

楼主: moussorgsky (法国号有气质)   2015-07-23 00:40:24
开发平台(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):
作者: BlazarArc (Midnight Sun)   2015-07-23 00:51:00
去找一本书把function pass argument的地方看完吧...http://ideone.com/MVmYhc 参考一下
作者: theWANDERER (痴、肥、蠢、宅)   2015-07-23 13:10:00
同楼上讲的,你对pass argument还是不够清楚以外你如果想要把2D array做成class,你会想把你这cal()做成一个class method
作者: Feis (永远睡不着 @@)   2015-07-23 13:27:00
要不要变成成员倒是不一定
楼主: moussorgsky (法国号有气质)   2015-07-23 15:41:00
我在网络上看到有人的建议是:把多维阵列用一维的方式传进副程式,然后在副程式里再转成多维阵列下去做运算,然后再传回主程式我刚刚有试了一下,在副程式里可以另外产生新的动态阵列,这样应该可以把原本的多维阵列用一维的方式传进副程式里,然后转存到在副程式里产生的新的动态多维阵列,做完运算再传回主程式
作者: BlazarArc (Midnight Sun)   2015-07-23 20:23:00
我给你的建议是 去找primer把C++好好学一学 不要写成C
作者: Sirctal (母猪母猪 夜里哭哭)   2015-07-23 23:32:00
只是我觉得Primer太杂了耶 The C++ Programming Language我比较喜欢
作者: fatrabitree (胖兔子)   2015-07-24 01:43:00
你是要练习还是要用?要用的话就用std::vector就好了要练习的话也可以去翻vector的实作
楼主: moussorgsky (法国号有气质)   2015-07-25 01:36:00
我会再去研究std::vector的。我是要跑数值模拟用的,我的程式码大概都是16000行以上,有时一个case要跑一个星期以上。我多年来大部分的变量都是宣告成global的,阵列也都是用写死的,所以我承认我对引数还有指标那些东西真的很不熟。我之前的case几乎都是二维的,开180万个元素大概是极限了,但我现在要跑三维的case,阵列的元素个数很容易就破千万,所以阵列写成死的根本compile就不会过......反正趁这个机会把引数还有指标、类别、样版等东西好好学一下,让自己的程式观念完整一些,也是好事。感谢大家的建议
作者: EdisonX (卡卡兽)   2015-07-25 01:49:00
资料量还算正常 (算一下大概 500MB) , 不过程式跑一周...
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2015-07-25 01:50:00
看原PO跑数值模拟应该不是CS本科
作者: EdisonX (卡卡兽)   2015-07-25 01:50:00
是 Alg. 那里没弄好 , 还是 O2 没开 , 还是本来就那么久?
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2015-07-25 01:51:00
毕竟物理现象要算的对才是重要 不过跑一周...
作者: EdisonX (卡卡兽)   2015-07-25 01:52:00
我跑超过 3 分钟就受不了要停下来了.. 万一一周后的结果是错的 , 那不是还要再重跑一周 , 想到都软了 Orz对了 , 有种东西叫 intel library ...然后你发的 sample code, 叫 intel library 做比你自己写速度还要快很多。
作者: Killercat (杀人猫™)   2015-07-27 13:06:00
你说的是Intel TBB? maa...建议等算法稳定点再用TBB一用下去还挺难除错的 <==受害者

Links booklink

Contact Us: admin [ a t ] ucptt.com