2013-03-31 4 views
0

Я тестирую, как это сделать, прежде чем я попытаюсь реализовать его в более крупной программе, которую я должен выполнить, и возникает проблема. Этот код работает отлично, но он продолжает давать только первое число в векторе. Что именно происходит неправильно?Создание случайного числа из вектора в C++

#include <iostream> 
#include <string> 
#include <vector> 
#include "stdlib.h" 
#include "time.h" 

using namespace std; 

int main() 
{ 
    int randomNumber; 
    int length; 
    int i = 0; 
    vector<int> x; 
    x.push_back(12); 
    x.push_back(1); 
    x.push_back(6); 
    x.push_back(34); 
    x.push_back(23); 

    srand(time(0)); 
    length = sizeof(x.capacity() - 1)/sizeof(int); 

    while(i < 10){ 
     randomNumber = x[rand() % length]; 
     cout << randomNumber << endl; 
     i++; 
    } 

    return 0; 
} 

ответ

3

Как вы вычислить length вашего вектора неправильно:

length = sizeof(x.capacity() - 1)/sizeof(int); 

с capacity()возвращает размер пространства для хранения, которое в настоящее время выделяется для вектора, выраженное в терминах элементов и, таким образом, ваш length равен 1 в вашем примере.

Вы должны использовать вместо size():

length = x.size(); 
+0

Это сделало трюк, который я ценю! Разделение на sizeof (int) вызывало проблемы. Я ценю всех парней помощи. – DiamonW

4

Этот вызов не прав:

length = sizeof(x.capacity() - 1)/sizeof(int);

Вы должны использовать x.size() вместо того, чтобы получить размер вектора.

Что вы делаете в приведенной выше строке - вычислите размер x.capacity() - 1, который является целым числом, а затем разделите его на размер целого числа. Таким образом, длина всегда одна и так rand()%length всегда 0.

+0

Ах! Я не знал о размере. Спасибо за помощь. – DiamonW

+0

Пожалуйста, разместите измененный код. –

0

Я думаю, что вы просто хотите использовать x.size(), вместо length:

randomNumber = x[rand() % x.size()]; 
Смежные вопросы