C++ 在c+中生成随机数+;

C++ 在c+中生成随机数+;,c++,random,numbers,C++,Random,Numbers,我需要生成一个介于1和n之间的随机数,其中n是无符号int。 如果n为int,我只需写1+rand()%n。但不幸的是,n是无符号int。您有什么建议?rand()应该尽可能避免*。 使用 #包括 #包括 int main() { std::随机_装置rd; 标准:mt19937发动机(rd()); 标准:统一分布区(1,77); 对于(int i=0;i!=5;++i) 尽可能避免使用std::coutrand()。 使用 #包括 #包括 int main() { std::随机_装置rd;

我需要生成一个介于1和n之间的随机数,其中n是无符号int。 如果n为int,我只需写
1+rand()%n
。但不幸的是,n是无符号int。您有什么建议?

rand()应该尽可能避免*。 使用

#包括
#包括
int main()
{
std::随机_装置rd;
标准:mt19937发动机(rd());
标准:统一分布区(1,77);
对于(int i=0;i!=5;++i)
尽可能避免使用std::coutrand()。
使用

#包括
#包括
int main()
{
std::随机_装置rd;
标准:mt19937发动机(rd());
标准:统一分布区(1,77);
对于(int i=0;i!=5;++i)

std::cout如果
n
是无符号整数为什么重要?在C++11中,有更好的方法生成随机数。试试
1+rand()%n
。Watch rand()被认为是有害的:如果
n
是无符号整数为什么重要?在C++11中,有更好的方法生成随机数。试试
1+rand())%n
.Watch rand()被认为是有害的:谢谢你的回答。我可以再问你一次吗?我最初的问题是写一个函数,用随机顺序的随机数填充数组。所以我所做的是#include#include使用namespace std;void genrandary(int*_result,unsigned int#maxValue){int i;random_device rd;mt19937 gen(rd());uniform_int_distribution dis1(0,_maxValue-1);uniform_int_distribution dis2(1,_maxValue);for(i=0;i<_maxValue;i++)_result[dis1(gen)]=dis2(gen}void main(){无符号int n=5;int*ar=new int[n];GenRandArray(ar,n)}@Igor为什么要以随机顺序填充它?这真的是一个要求吗,因为这对我来说没有意义。另请参阅,谢谢你的回答。我可以再问一次吗?我最初的问题是编写一个函数,用随机顺序填充一个数组。所以我所做的是#include#include使用名称空间std;void GenRandArray(int*_result,unsigned int maxValue){int i;random_device rd;mt19937 gen(rd());uniform_int_distribution dis1(0,_maxValue-1);uniform_int_distribution dis2(1,_maxValue);for(i=0;i<_maxValue;i++)_result[dis1(gen)]=dis2(gen)}void main(){unsigned intn=5;int*ar=new int[n];randarray(ar,n)}@Igor你为什么要随机填写?这真的是一个要求吗?因为我觉得这没有意义。另请参阅
#include <random>
#include <iostream>


int main()
{
    std::random_device rd;
    std::mt19937 engine(rd());
    std::uniform_int_distribution<unsigned> dist(1, 77);

    for (int i = 0; i != 5; ++i)
        std::cout << dist(engine) << '\n';
}
std::mt19937 create_seeded_rng() 
{ 
    std::random_device rd; 
    std::array<std::mt19937::result_type, std::mt19937::state_size> seed_data; 
    std::generate(seed_data.begin(), seed_data.end(), std::ref(rd)); 
    std::seed_seq seq(seed_data.begin(), seed_data.end()); 
    return std::mt19937(seq); 
} 

int main() 
{ 
    std::mt19937 rng = create_seeded_rng(); 
    std::uniform_int_distribution<int> dist(0, 100); 

    for (unsigned i = 0; i != 100; ++i) 
        std::cout << dist(rng) << '\n'; 
}