在c++中从向量生成随机数

Generating a random number from a vector in c++

本文关键字:随机数 向量 c++      更新时间:2023-10-16

我正在测试如何做到这一点之前,我试图在一个更大的程序中实现它,我必须这样做,一个问题正在出现。这段代码工作得很好,但它仍然只给出向量中的第一个数字。到底是哪里出了问题?

#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 = sizeof(x.capacity() - 1) / sizeof(int);

你应该使用x.size()来获得向量的大小。

你在上面一行所做的是-计算x.capacity() - 1的大小,这是一个整数,然后除以一个整数的大小。因此长度总是1,所以rand()%length总是0。

你计算向量的length的方式是错误的:

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

因为capacity() 返回当前为vector分配的存储空间的大小,以元素表示,因此在您的示例中length等于1

你应该用size()代替:

length = x.size();

我想你只是想使用x.size(),而不是length:

randomNumber = x[rand() % x.size()];