Генерация случайного числа из вектора в переполнении стека

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

#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;
}

0

Решение

То, как вы рассчитываете length вашего вектора не так:

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

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

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

length = x.size();
3

Другие решения

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

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

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

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

4

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

randomNumber = x[rand() % x.size()];
0
По вопросам рекламы [email protected]