Я проверяю, как это сделать, прежде чем я попытаюсь реализовать его в более крупной программе, и мне придется столкнуться с проблемой. Этот код работает нормально, но он продолжает давать только первое число в векторе. Что именно идет не так?
#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;
}
То, как вы рассчитываете length
вашего вектора не так:
length = sizeof(x.capacity() - 1) / sizeof(int);
поскольку capacity()
возвращает размер пространства памяти, выделенного в данный момент для вектора, выраженного в виде элементов и, таким образом, ваш length
равно 1
в вашем примере.
Вы должны использовать size()
вместо:
length = x.size();
Этот звонок не прав:
length = sizeof(x.capacity() - 1) / sizeof(int);
Вы должны использовать x.size()
вместо этого, чтобы получить размер вектора.
то, что вы делаете в приведенной выше строке — вычислить размер x.capacity() - 1
которое является целым числом, а затем разделить его на размер целого числа. Таким образом, длина всегда равна 1 и так rand()%length
всегда 0.
Я думаю, что вы просто хотите использовать x.size()
, вместо length
:
randomNumber = x[rand() % x.size()];