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

作者: moussorgsky (法國號有氣質)   2015-07-25 04:06:55
: → fatrabitree: 你是要練習還是要用? 07/24 01:43
: → fatrabitree: 要用的話就用std::vector就好了 07/24 01:43
: → fatrabitree: 要練習的話也可以去翻vector的實作 07/24 01:44
我找到用vector寫動態陣列的code了,不過我遇到新的問題:
在main裡面呼叫副程式,陣列有傳進去副程式裡面,在副程式裡面對陣列做運算也有成功
,不過沒有回傳到main裡面......我應該在副程式裡加什麼動作嗎?
#include <iostream>
#include <vector>
#include "conio.h"
using namespace std;
void cal1(vector<vector<int> > ivec){
for(int y = 0; y != ivec.size(); ++y) {
for(int x = 0; x != ivec[0].size(); ++x) {
cout << ivec[y][x] << endl;
ivec[y][x] = ivec[y][x] + 1;
cout << ivec[y][x] << endl << endl;
// 這裡的輸出的確有對ivec做改變了
}
}
}
int main() {
const int sizex = 3;
const int sizey = 2;
vector<vector<int> > ivec(sizey, vector<int>(sizex));
for(int y = 0; y != sizey; ++y) {
for(int x = 0; x != sizex; ++x) {
ivec[y][x] = y + x;
}
}
for(int y = 0; y != sizey; ++y) {
for(int x = 0; x != sizex; ++x) {
cout << ivec[y][x] << endl;
}
}
cout << endl << endl;
//未呼叫副程式前的初始值是0,1,2,1,2,3
cal1(ivec);
//各元素值加1,在副程式裡有cout,結果是正確的
cout << endl;
for(int y = 0; y != sizey; ++y) {
for(int x = 0; x != sizex; ++x) {
cout << ivec[y][x] << endl;
}
}
//再cout出來時,ivec沒有改變......應該是沒有回傳回來
//我應該在副程式裡加什麼,才能讓改變後的值傳回來呢?
//順便問一下:我如果引入兩組以上的陣列到副程式裡做運算,且兩組
//陣列都有被改變,我要怎麼把它們都傳回main呢?
system("pause");
}
: 推 EdisonX: 資料量還算正常 (算一下大概 500MB) , 不過程式跑一週... 07/25 01:49
: 推 Sunal: 看原PO跑數值模擬應該不是CS本科 07/25 01:50
我如果是CS本科,連引數都不會的話,我真的該去跳樓了......
我以前大四去修C++,學期還沒到一半就已經開始混了......學期末的上機考也很爛,
資料結構的觀念也很弱......
: → EdisonX: 是 Alg. 那裡沒弄好 , 還是 O2 沒開 , 還是本來就那麼久? 07/25 01:50
: → Sunal: 畢竟物理現象要算的對才是重要 不過跑一週... 07/25 01:51
: → EdisonX: 我跑超過 3 分鐘就受不了要停下來了.. 萬一一週後的結果 07/25 01:52
: → EdisonX: 是錯的 , 那不是還要再重跑一週 , 想到都軟了 Orz 07/25 01:52
: → EdisonX: 對了 , 有種東西叫 intel library ... 07/25 01:53
: → EdisonX: 然後你發的 sample code, 叫 intel library 做比你自己 07/25 01:57
: → EdisonX: 寫速度還要快很多。 07/25 01:57
我在讀計算流體力學(數值模擬)方面的博班,跑一週還算短的,
以前我們研究室碩班的學妹,用套裝軟體(FLUENT)跑80萬網格的VOF(有自由液面的那
種case),還有跑超過兩個星期的......
所以我們都要先測試小domain,確定物理現象是對的,才敢跑大domain。
其實說實話,我們只要會基本的程式流程就可以跑模擬了,我們難是難在數學的model
不易理解。所以當我需要稍微進階一點點的程式技巧的時候,我就需要來這裡求助了..
作者: moussorgsky (法國號有氣質)   2015-07-25 07:43:00
我會了~在引入副程式時使用指標,在call副程式時使用解指標。再次謝謝大家的指教!
作者: MOONRAKER (㊣牛鶴鰻毛人)   2015-07-25 10:39:00
跑兩個星期會不會太誇張 是不是CPU被偷換成286 >_<
作者: ZanFu5566 (仁甫56 優質56 清新56)   2015-07-25 11:09:00
&
作者: fatrabitree (胖兔子)   2015-07-25 11:59:00
太慢的話是不是先考慮搞平行化甚至cuda
作者: huei820504 (huei820504)   2015-07-25 19:51:00
出於好奇,問一下為什麼要用malloc,一般來說可以用new吧?

Links booklink

Contact Us: admin [ a t ] ucptt.com