2014-11-28 2 views
0

У меня есть функция в классе, который я пишу, который должен только заполнить вектор случайными числами. По какой-то причине он генерирует только одно и то же случайное число и заполняет массив этим числом, несмотря на использование цикла, в котором rand() вызывается снова и снова. Я посеял ранда со временем (0). Я попытался разместить семена внутри петли, и это не имело никакого значения. Вот моя функция. «array» - фактически вектор.Заполнить вектор случайными числами

void fillArray() 
    { 
     srand(time(0)); 

     for (unsigned int i = 0; i < array.size(); i++) 
     { 
     array.at(i) = rand() % 200; 
     } 
    } 
+2

Вы выполняли несколько раз? Вы пытались поместить это в 'main' и работать с' vector' размером '10', чтобы сделать тривиальный тест? – Columbo

+0

Ваш вопрос заставил меня снова взглянуть на мой класс. То, что я делал, это использовать перегруженную функцию «at()» в моем классе, чтобы скопировать функцию векторного класса at(). Я объявил, что это const, который препятствует изменению индекса. Удаление const заставило его работать правильно. Спасибо! – Sabien

+0

@Sabien Если вы нашли ответ, отправьте ответ на свой вопрос. (Http://stackoverflow.com/help/self-answer) – ikh

ответ

0

Вы можете проверить состояние массива. Возможно, size() равен нулю при выполнении вызова for, и в этом случае ничего не записывается в массив. Я предлагаю вам сначала проверить это.

Кроме того, для выполнения модуля 200 не подходит для случайности. Я копирую фрагмент из страницы man для rand():

In Numerical Recipes in C: The Art of Scientific Computing (William H. 
     Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New 
     York: Cambridge University Press, 1992 (2nd ed., p. 277)), the follow- 
     ing comments are made: 
      "If you want to generate a random integer between 1 and 10, you 
      should always do it by using high-order bits, as in 

      j = 1 + (int) (10.0 * (rand()/(RAND_MAX + 1.0))); 

      and never by anything resembling 

      j = 1 + (rand() % 10); 

      (which uses lower-order bits)." 
-1

Код, по-видимому, правильный, чтобы заполнить вектор случайными числами. Ошибка исходит от этой функции в моем классе:

int at(int index) 
    { 
     return array.at(index); 
    } 

Он был создан, чтобы использовать вектор класса в функции, но я первоначально объявил это сопзЬ, который сделал это возвращает тот же показатель для каждой итерации цикла.

+0

Объявление 'at' as' const' не должно вызывать описанную проблему, по крайней мере, не с реализацией в этом ответе. Вероятно, проблема была в другом месте вашего кода, и вы случайно ее исправили, не осознавая. –

Смежные вопросы