2012-10-10 70 views
0

如何獲得隨機指針形式的指針列表? 我有簡單的自定義class Buildings和列表如何獲得指針形式的隨機指針列表?

std::list<Buidldings*> temp; 

溫度的大小大於零。如何從列表中獲取隨機指針(0 - temp.size)?

+0

你可以提前一個迭代的隨機量(只要因爲它仍然在列表中)。 – chris

+2

關鍵是要使用指向指針的指針,然後將該指針指向指向第一個指針和最後一個指針之間的隨機點的指針。 – 2012-10-10 07:52:09

+1

@ H2CO3:這真是一口 - 我不明白,沒有教程。有任何指針? – molbdnilo

回答

9

使用std::rand挑選一個合適的索引,然後advance迭代器:

assert(!temp.empty()); 
std::list<Buidldings*>::const_iterator it = temp.begin(); 
std::advance(it, std::rand() % temp.size()); 
Buidldings *p = *it; 
4

試試這個:

template<typename ContainerType > 
typename ContainerType::iterator get_random(ContainerType & container) 
{ 
    ContainerType::iterator iter = container.begin(); 
    std::advance(iter,rand() %container.size()); 
    return iter ; 
} 

template<typename ContainerType > 
typename ContainerType::const_iterator get_random(const ContainerType & container) 
{ 
... (same as above) 
} 

here

+0

「隨機」參數根本不使用;故意的? –

+0

爲我複製粘貼的權利..在gamedev後所有的解決方案使用相同的風格..做了先進的規範從c + + 03更改爲c + + 11? –

+0

@KarthikT不,它沒有,鏈接的代碼一直是不正確的。雖然在C++ 11中,我們可以'返回std :: next(list.begin(),rand()%list.size());'。 –