作者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