c++ rand生成数,如果要在下次随机生成中删去已经出现的如何做
时间: 2024-09-10 21:29:36 浏览: 36
在 C++ 中,`rand()` 函数通常用于生成伪随机整数,但它本身并不提供记住之前生成值的功能。如果你想要在下次随机生成时不重复已有的数值,你需要自定义一个数据结构来记录生成的历史,并在生成新随机数前检查这个列表。
以下是一个简单的示例,使用 `std::vector` 存储历史值:
```cpp
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
// 定义一个大小固定的随机数范围
const int MIN = 0;
const int MAX = 10;
class RandomGenerator {
private:
std::vector<int> history;
std::mt19937 generator; // 使用 Mersenne Twister 算法
std::uniform_int_distribution<> distribution(MIN, MAX);
public:
RandomGenerator() : generator(std::random_device{}()) {}
int generateUnique() {
while (true) {
int next = distribution(generator);
if (history.find(next) == history.end()) {
history.push_back(next);
return next;
}
}
}
// 添加其他必要的功能...
};
int main() {
RandomGenerator gen;
srand(time(0)); // 初始化随机数种子
for (int i = 0; i < 10; ++i) {
std::cout << gen.generateUnique() << " ";
}
return 0;
}
```
在这个例子中,我们创建了一个 `RandomGenerator` 类,每次调用 `generateUnique()` 时会生成一个新的随机数,如果这个数不在历史记录中,则添加并返回;如果已经在历史中,就继续生成直到找到新的数。
然而,这种方法对于大规模的随机数生成可能会很慢,因为它需要不断检查历史。如果内存允许,你可以考虑使用更复杂的数据结构,如哈希表来提高查找效率。
阅读全文