[問題] 關於迴圈中使用rand()的問題

作者: fishlinghu (令狐瑜)   2014-06-11 20:12:48
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Windows Code Blocks 12.11
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
no
問題(Question):
我用while迴圈執行同一個function很多次
function裡面有用到rand()
我希望可以藉由很多次執行來找到一個不錯的解
可是發現每次執行的時候rand()的結果好像都一樣
我的程式結構大致如下
main
{
srand(time(NULL));
i = 0;
while(i<100)
{
function();
++i;
}
}
function()
{
vector<int> ordered_elements;
vector<int> new;
//利用rand()選擇一個經過排序的vector中的物件
//存入另一個新的vector
}
這是我主要有用到rand()的部分
我之後會拿那個隨機排序的新vector去做其他的事情
後來發現每次結果都一樣
我用rand()的方式就是利用rand()%ordered_elements.size()
來選擇已經過排序的vector中的物件
我有聽說這個限制範圍的方法好像不太好
不過還是很納悶怎麼會完全一樣
希望有人可以解答
或是提供一些參考資料
感謝
================================================================
抱歉傻了
剛剛看到有地方沒有initialize
我的用法是對的
需要自D嗎
sorry
作者: yyep (yeah)   2014-06-11 20:15:00
幫推令狐魚 不然他其末要被當了
作者: myislin (小雨)   2014-06-11 20:23:00
想知道+1
作者: RouterHsieh (醉臥美人膝,醒掌天下權)   2014-06-11 20:47:00
C++我不知道,不過在C上面,你得用srand()設定seed如果沒有先設定seed的話,rand()的結果就不是真的亂數
作者: handsome616 (豆花伯爵)   2014-06-11 20:49:00
#include <random>
作者: fishlinghu (令狐瑜)   2014-06-11 20:57:00
有 我有在main裡面先把time當成seed然後random我的compiler不support這題最後也不是要用我電腦測 所以不太敢用那個library
作者: handsome616 (豆花伯爵)   2014-06-11 21:16:00
12.11可以,不是在自己電腦上測的話就沒辦法
作者: diabloevagto (wi)   2014-06-11 21:44:00
我自己在用 rand 沒有遇到結果都一樣的情況http://www.cplusplus.com/reference/random/上面提供的那個是 c++11 的功能你 compiler 不能太舊,compiler 也要加上參數-std=c++11你也無法自d
作者: firejox (Tangent)   2014-06-12 03:09:00
好shuffle 不用嗎
作者: flydragon198 (Richard)   2014-06-12 06:47:00
我記得c++使用rand會有這種狀況,大學時代寫作業有遇到過,不過忘記後來怎麼改的就好了
作者: damody (天亮damody)   2014-06-12 18:46:00
一樣才好啊 不一樣就慘了

Links booklink

Contact Us: admin [ a t ] ucptt.com