【问题标题】:Generating a random number from a vector in c++从 C++ 中的向量生成随机数
【发布时间】:2013-03-31 20:14:49
【问题描述】:

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

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

【问题讨论】:

    标签: c++ vector srand


    【解决方案1】:

    这个调用不正确:

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

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

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

    【讨论】:

    • 啊!我不知道大小。感谢您的帮助。
    【解决方案2】:

    你计算向量的length的方式不对:

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

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

    你应该改用size()

    length = x.size();
    

    【讨论】:

    • 这成功了,我很感激!除以 sizeof(int) 引起了麻烦。感谢所有的帮助。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多