如何优化这段代码以提高生成速度?
时间: 2024-10-14 15:03:50 浏览: 19
代码优化与目标代码生成(介绍)编译原理
为了优化这段代码,减少查找重复数的操作可以显著提高生成速度。由于我们是在生成每个随机数之前检查其是否已存在,所以可以考虑预先把0到`max`的所有可能值存储在一个集合(如`std::unordered_set`),因为集合的查找操作时间复杂度为O(1),这比每次遍历向量快得多。
下面是优化后的代码示例:
```cpp
#include <iostream>
#include <random>
#include <unordered_set>
std::vector<int> generate_unique_random(int min, int max) {
std::default_random_engine generator(std::chrono::system_clock::now().time_since_epoch().count());
std::uniform_int_distribution<int> distribution(min, max);
std::unordered_set<int> used_numbers;
std::vector<int> unique_numbers;
while (unique_numbers.size() < 5) {
int random_num = distribution(generator);
if (used_numbers.insert(random_num).second) {
unique_numbers.push_back(random_num);
}
}
return unique_numbers;
}
int main() {
std::vector<int> unique_numbers = generate_unique_random(0, 99999); // 生成0-99999之间的五位数
for (const auto& num : unique_numbers) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
在这个版本中,我们使用`used_numbers.insert(random_num)`,如果插入成功(返回值为true),说明这个数还没被用过,将其加入向量`unique_numbers`。这样避免了每次生成都需要查找是否重复的过程。
阅读全文