编译不过,random_shuffle这个函数未定义
时间: 2023-11-21 13:10:04 浏览: 197
如果编译时提示 `random_shuffle()` 函数未定义,可能是因为您的编译器版本太老,不支持 C++11 标准的随机数库。可以将以下代码:
```c++
srand((unsigned)time(NULL)); // 初始化随机数种子
```
替换为:
```c++
std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count());
```
并在程序开头加入头文件:
```c++
#include <random>
#include <chrono>
```
然后将 `random_shuffle()` 函数替换为:
```c++
std::shuffle(num.begin(), num.end(), rng);
```
这样就可以使用 C++11 提供的随机数库了。下面是修改后的程序:
```c++
#include <iostream>
#include <random>
#include <chrono>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
std::mt19937 rng(std::chrono::steady_clock::now().time_since_epoch().count()); // 初始化随机数生成器
vector<int> num(35), red(12), blue(5); // 定义号码数组
for (int i = 0; i < 35; i++) {
num[i] = i + 1; // 初始化号码数组
}
for (int k = 0; k < 5; k++) { // 机选 5 注
// 随机选取红球号码
std::shuffle(num.begin(), num.end(), rng); // 打乱号码顺序
for (int i = 0; i < 2; i++) {
red[i] = num[i]; // 选取号码
}
sort(red.begin(), red.end()); // 对红球号码排序
// 随机选取蓝球号码
std::shuffle(num.begin(), num.end(), rng); // 打乱号码顺序
for (int i = 0; i < 5; i++) {
blue[i] = num[i]; // 选取号码
}
sort(blue.begin(), blue.end()); // 对蓝球号码排序
// 输出结果
cout << "第 " << k + 1 << " 注:" << endl;
cout << "红球号码:";
for (int i = 0; i < 2; i++) {
cout << red[i] << " ";
}
cout << endl << "蓝球号码:";
for (int i = 0; i < 5; i++) {
cout << blue[i] << " ";
}
cout << endl << endl;
}
return 0;
}
```
这个程序使用了 C++11 中的随机数库,可以保证号码的随机性和唯一性。
阅读全文