C++ C++;:如何随机分配一系列不同的数字?

C++ C++;:如何随机分配一系列不同的数字?,c++,function,C++,Function,我想随机选择一系列数字: 例如:1到9的序列 3765119428 你看,这不是一个重复的号码。我认为它涉及到:srand(time(NULL)) 谢谢 您必须包括stdlib.h /* ... */ srand(time(NULL)); int v = rand() % 10; //random [0, 10) /* ... */ 在此之后,应将值放在数组(或向量)上,并每次检查值,例如: #include <algorithm> //for find /* ... */ std

我想随机选择一系列数字: 例如:1到9的序列
3765119428
你看,这不是一个重复的号码。我认为它涉及到:
srand(time(NULL))


谢谢

您必须包括stdlib.h

/* ... */
srand(time(NULL));
int v = rand() % 10; //random [0, 10)
/* ... */
在此之后,应将值放在数组(或向量)上,并每次检查值,例如:

#include <algorithm> //for find
/* ... */
std::vector<int> v;
while(v.size() != 10) {
    int x = rand() % 10;
    auto it = std::find(v.begin(), v.end(), x);
    if(it == v.end())
        v.push_back(x);
}
#包含//用于查找
/* ... */
std::向量v;
而(v.size()!=10){
int x=rand()%10;
auto it=std::find(v.begin(),v.end(),x);
如果(it==v.end())
v、 推回(x);
}

您必须包括stdlib.h

/* ... */
srand(time(NULL));
int v = rand() % 10; //random [0, 10)
/* ... */
在此之后,应将值放在数组(或向量)上,并每次检查值,例如:

#include <algorithm> //for find
/* ... */
std::vector<int> v;
while(v.size() != 10) {
    int x = rand() % 10;
    auto it = std::find(v.begin(), v.end(), x);
    if(it == v.end())
        v.push_back(x);
}
#包含//用于查找
/* ... */
std::向量v;
而(v.size()!=10){
int x=rand()%10;
auto it=std::find(v.begin(),v.end(),x);
如果(it==v.end())
v、 推回(x);
}

您应该包括ctime和stdlib.h

    srand((int) time(0));
    int p;
    for(int j=1; j<= 9; j++)
        {
            p = ((rand() % 99) %9 )+1;
                      cout <<p <<endl;

        }
srand((int)时间(0));
INTP;

对于(intj=1;j您应该包括ctime和stdlib.h

    srand((int) time(0));
    int p;
    for(int j=1; j<= 9; j++)
        {
            p = ((rand() % 99) %9 )+1;
                      cout <<p <<endl;

        }
srand((int)时间(0));
INTP;

对于(intj=1;j,最简单、最优雅的方法(在我看来)是使用和

下面是一个例子(基于上面的链接):

#包括
#包括
#包括
#包括
int main()
{
std::向量v(9);
标准::物联网(v.begin(),v.end(),1);
std::shuffle(v.begin(),v.end(),
std::mt19937{std::random_设备{}()});
//“v”现在是一个包含随机变量的向量
//整数的排序1-9。
}

在我看来,最简单、最优雅的方式就是使用和使用

下面是一个例子(基于上面的链接):

#包括
#包括
#包括
#包括
int main()
{
std::向量v(9);
标准::物联网(v.begin(),v.end(),1);
std::shuffle(v.begin(),v.end(),
std::mt19937{std::random_设备{}()});
//“v”现在是一个包含随机变量的向量
//整数的排序1-9。
}

您正在寻找
std::shuffle
。不,通常它涉及
std::shuffle()
srand()
(或其他生成器)不保证StackOverflow不欢迎复制号码。请花一分钟时间通读。除了上述函数外,请查看。您的问题的答案就是您正在寻找的示例。
std::shuffle
。不,通常它涉及
std::shuffle()
srand()
(或其他生成器)不能以任何方式保证StackOverflow不欢迎使用重复的数字。请花一分钟时间通读。除了上述函数外,请查看。您的问题的答案实际上是一个过于复杂和缓慢的示例。只需用所需的数字填充向量即可(
std::iota
让这变得很容易),然后
std::shuffle
就可以了。只要几行代码,快速而优雅,而且不会弄乱像
rand
这样糟糕的函数。顺便说一句,你在用模(
%
)制造偏见,
时间()
是一粒可怕的种子。@JesperJuhl,老实说,
时间()
对于许多用途来说都是一个不错的种子。当然,这不适用于加密,但完全适用于其他情况。@SergeyA即使在加密之外,当程序的两个实例在同一秒内运行时,也会得到令人不快的结果。这很容易发生-例如,如果这是在Web服务中,每秒会被查询数千次。@JesperJuhl,想象一个单设备游戏(RND的大用户),例如(因为我不一定确定Web服务为什么需要RND)。对于这种用例,时间作为RND种子是完全可以接受的。这太复杂和缓慢了。只需用所需的数字填充一个向量(
std::iota
使这变得容易),然后
std::shuffle
它。只需几行代码,快速而优雅,而且不会弄乱像
rand
这样糟糕的函数。顺便说一句,你在用模(
%
)制造偏差,
time()
是一粒可怕的种子。@JesperJuhl,老实说,
time()
对于许多用途来说都是一个不错的种子。当然,这不适用于加密,但完全适用于其他情况。@SergeyA即使在加密之外,当程序的两个实例在同一秒内运行时,也会得到令人不快的结果。这很容易发生-例如,如果这是在Web服务中,每秒会被查询数千次。@JesperJuhl,想象一个单设备游戏(RND的大用户),例如(因为我不一定确定webservice为什么需要RND)。对于这种用例,RND种子的时间是完全可以接受的。