Random函数c++
时间: 2024-09-24 18:04:59 浏览: 44
在 C++ 中,`<random>` 模块提供了一套强大的随机数生成功能,其中 `rand()` 函数是一个传统的 C 标准库函数,但是它不够强大且种子固定,不适合现代应用。如果你想使用更高级、更可控的随机数生成,你可以选择以下几个方法:
1. **`std::mt19937`** (基于 Mersenne Twister 算法):这是一个高质量的伪随机数生成器,常用于默认的随机数引擎。例如:
```cpp
std::mt19937 generator; // 创建一个实例
std::uniform_int_distribution<int> distribution(0, 100); // 定义随机数范围
int random_number = distribution(generator); // 生成随机整数
```
2. **`std::default_random_engine` 和 `<random_device>`**:可以结合使用 `<random_device>` 来获取更好的随机种子,提高随机性的多样性。例如:
```cpp
std::random_device rd;
std::default_random_engine gen(rd());
```
3. **`std::normal_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`不会相等。
阅读全文