2014-10-28 253 views
1

這是我迄今爲止使用的函數。這只是問題的開始,它要求爲輸出產生一個10乘5的數字組中的隨機數字,然後在這之後按照數字大小排序,但我只是試圖首先得到這個數字部分下降。生成50個隨機數並將它們存儲到一個數組中C++

/* Populate the array with 50 randomly generated integer values 
* in the range 1-50. */ 
void populateArray(int ar[], const int n) { 
    int n; 
    for (int i = 1; i <= length - 1; i++){ 

     for (int i = 1; i <= ARRAY_SIZE; i++) { 
      i = rand() % 10 + 1; 
      ar[n]++; 
     } 

    } 
} 
+2

請最高警告級別編譯。如果你這樣做了,那麼當另一個變量n已經存在時(你隱藏了參數n),你的編譯器會警告你正在聲明一個局部變量n。你在你的行「ar [n] ++」中使用這個未初始化的n。另外:什麼是長度?什麼是ARRAY_SIZE?應該是什麼? – 2014-10-28 16:54:12

回答

0

首先我們要用std::array;它有一些很好的屬性,其中之一就是它不會像指針一樣衰減。另一個是它知道它的大小。在這種情況下,我們將使用模板使populateArray成爲足夠通用的算法。

template<std::size_t N> 
void populateArray(std::array<int, N>& array) { ... } 

然後,我們要刪除所有「raw」for循環。 std::generate_n結合一些隨機發生器似乎是一個不錯的選擇。

對於號碼發生器我們可以使用<random>。具體爲std::uniform_int_distribution。爲此,我們需要得到一些生成和運行:

std::random_device device; 
std::mt19937 generator(device()); 
std::uniform_int_distribution<> dist(1, N); 

,並在我們的std::generate_n算法使用它:

std::generate_n(array.begin(), N, [&dist, &generator](){ 
    return dist(generator); 
}); 

Live demo

+0

感謝您的反饋,但唯一的問題是我已經獲得了主要和所有功能,我們必須相應地構建功能 – Pat 2014-10-28 17:15:00

相關問題