c++ random
时间: 2023-07-01 17:25:16 浏览: 52
在 C++ 中,可以使用 `<random>` 头文件来生成伪随机数。该头文件提供了多种生成随机数的方法,包括线性同余生成器、梅森旋转算法等。
下面是一个简单的例子,使用 `std::mt19937` 生成器和 `std::uniform_int_distribution` 分布来生成一个 1 到 100 的随机整数:
```c++
#include <iostream>
#include <random>
int main() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 100);
std::cout << "Random number: " << dis(gen) << '\n';
return 0;
}
```
其中,`std::random_device` 用于获取一个真随机数生成器的种子,`std::mt19937` 是一个 32 位的梅森旋转算法生成器,`std::uniform_int_distribution` 用于生成整数分布。
需要注意的是,生成的随机数是伪随机数,因此在每次运行程序时生成的随机数序列可能是不同的,但在同一次运行中生成的随机数序列是确定的。
相关问题
C++ random函数
C++中的random函数可以用来生成随机数。它需要包含头文件<cstdlib>,并且可以通过设置随机数种子来控制随机数的生成。以下是一个简单的例子:
```c++
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
// 设置随机数种子为当前时间
std::srand(std::time(nullptr));
// 生成10个随机数
for (int i = 0; i < 10; i++) {
std::cout << std::rand() << std::endl;
}
return 0;
}
```
在上面的例子中,我们使用了std::srand函数来设置随机数种子,它需要一个整数参数。我们使用std::time函数来获取当前时间,并将其转换为整数作为种子。这样每次运行程序时,种子都会不同,从而生成不同的随机数序列。
c++ random函数库
C++11引入了一个新的随机数库,可以生成更高质量的随机数。这个库提供了几个类和函数来生成不同分布的随机数。下面是一个使用C++ random库生成均匀分布随机数的例子[^2]:
```cpp
#include <iostream>
#include <random>
#include <vector>
std::vector<unsigned> good_randVec() {
std::random_device rd;
std::mt19937 e(rd());
std::uniform_int_distribution<unsigned> u(0, 9);
std::vector<unsigned> ret;
for (size_t i = 0; i < 100; i++) {
ret.push_back(u(e));
}
return ret;
}
int main() {
std::vector<unsigned> v1(good_randVec());
std::vector<unsigned> v2(good_randVec());
std::cout << ((v1 == v2) ? "equal" : "not equal") << std::endl;
return 0;
}
```
这个例子中,我们使用了`std::random_device`来获取真正的随机数种子,然后使用`std::mt19937`作为随机数引擎,`std::uniform_int_distribution`来生成均匀分布的随机数。每次调用`good_randVec`函数都会生成不同的随机数序列,因此`v1`和`v2`不会相等。