用随机数填充向量

Filling in a vector with random numbers

我正在尝试使用 srand 打印随机数。这是我的代码。

我希望列表中的每个后续数字都大于前一个数字。

这是我的代码。

#include <iostream>
#include <ctime>
#include <cmath>
#include <random>
#include <vector>
#include <algorithm>
#include <climits> // for INT_MAX;


int main(){
srand((int)time(0));

std::vector<int> myVec;


int number = 5;
for(size_t index = 0; index <100; index++){
  int  result = (rand() % number) +1;
  if((result % 5) == 0 or (result % 5 == 3 && index == 50)){
    number += 2;
    myVec.push_back(number);
}
}

for(int vec : myVec){
    std::cout << vec << "  ";
}

return 0;
}

我正在寻找的输出是

0 2 4 6 9 12 等等

有人可以指导我如何实现吗?

你应该能把这个写得简单很多。此外,您的代码似乎没有获得任何随机值的原因是因为您用 myVec.push_back(number) 推回了您的界限。你应该改为 myVec.push_back(result).

至于你的实际问题,你的代码似乎并没有按照你想要实现的目标来编写。如果你想得到比后面的值大0-4的值,最好这样写:

#include <iostream>
#include <ctime>
#include <random>
#include <vector>

int main(){
    srand(time(0));

    std::vector<int> nums;

    int lower = 0;
    for(int i=0; i<100; i++) {
        // generate random number from lower bound to upper bound
        // starting lower bound is 0
        nums.push_back((rand() % 5) + lower);
        lower = nums[nums.size()-1];
    }

    for(int num : nums){
        std::cout << num << "  ";
    }
    std::cout << "\n";
    return 0;
}

所以,一般来说,如果随机函数是 returning 任何值 x,其中 0 <= x < 1(我相信 C/C++ rand() 确实如此),那么得到一个给定范围内的值,您希望采用这种格式:

(rand() % (upper_bound - lower_bound + 1)) + lower_bound

但是,您说过您希望所有值都比下限大 0-4。这意味着我们基本上想从我们的下限开始,并向其添加 0-4。所以实际上,我们只需要生成一个 0-4 之间的随机数。上面的代码执行 rand() % 5 因为 rand() % N 将 return 任何数字 x where 0 <= x < N。所以,我们想要做 rand() % 5,它会得到从 0 到 4 的任何数字。

此外,这只是语义,但根据我个人的经验,尝试对变量命名保持一定程度的推断总是好的。在你的 for-each 循环中你写了 for(int vec : myVec),但是乍一看,这可能看起来 myVec 实际上是一个 向量的向量 ,而 myVec 的每个元素都是一个矢量本身。尽管明确声明了 int 类型,但如果它的类型不是向量,开发人员仍然很容易混淆为什么将其命名为“vec”。再一次,其中一些归结为偏好,以及这是针对个人项目、任务还是实际生产代码。但我会开始养成一个好习惯,确保事物的命名是有目的的。