作者flarehunter (Range)
看板NTUEE115
標題[閒聊] 昨天下課
時間Wed Jun 8 09:37:29 2011
有些同學有問一些不錯的問題
不過後來我也忘記講了 就在這邊講一下
1) random似乎不夠亂?
昨天的做法是
for(int i=0; i<N; ++i){
int j = rand() % N; //產生 0 ~ N-1 之間的亂數
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
所以可能的變化是N的N次方 (N^N)
不是N!的倍數,所以每個數在每個位置的出現機率不同
比較好的做法是
for(int i=0; i<N; ++i){
int j = (rand() % (N-i)) + i; //產生 i ~ N-1 之間的亂數
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
這樣每個地方出現的機率就相同了
2) this 在C++和C#的用法不同?
在複數那個例子中,加法是這樣寫的
Complex add(Complex c)
{
Complex ret; //to be returned
ret.real =
(*this).real + c.real;
ret.imag =
(*this).imag + c.imag;
return ret;
}
但是到了C#的Hello world程式 卻是這樣寫的
public void button1_Click(object sender, EventArgs e)
{
this.label1.Text = "World";
}
為什麼在C++多了一個奇怪的 * 呢?
因為在C++裡,this這個東西是指標(pointer)
而C#裡面,沒有指標這種東西 (除非用unsafe mode)
然後在新鮮人課程中,我們沒有打算要講指標這玩意XDD
所以如果你看不懂的話,也是沒什麼關係
長大之後就會懂了。
--
如果上面都看不懂的話
其實也沒什麼關係
昨天只要聽懂ptt和縮排我就心滿意足了XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.8.201
1F:推 pcyeh:長大之後就會懂了...推! 06/08 17:34
2F:推 butterfly21:是說在C++之下,(*this). 又可寫成this-> 很直覺唉XD 06/08 17:51
3F:→ TommyKSHS:如果需要指標的教學可以從 113 HW 板轉過來 XD 06/08 19:34
4F:推 ym920823:推樓上的指標教學XD 06/08 22:05
5F:推 Desperato:推推推 06/09 21:03
6F:推 concise:推三樓湯米的教學 06/10 02:19