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

时间:2013-03-31 20:14:49

标签: c++ vector srand

我正在测试如何做到这一点,然后我尝试在一个更大的程序中实现它,我必须做,并且出现问题。此代码工作正常,但它继续只给出向量中的第一个数字。究竟出了什么问题?

#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 个答案:

答案 0 :(得分:4)

这次电话不对:

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

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

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

答案 1 :(得分:3)

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

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

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

您应该使用size()代替:

length = x.size();

答案 2 :(得分:0)

我认为您只想使用x.size(),而不是length

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