c++在a个数据中均匀的取出b个数
时间: 2024-04-12 13:28:30 浏览: 9
你可以使用洗牌算法(Fisher-Yates算法)来实现从a个数据中均匀地取出b个数。以下是一个C++的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <random>
std::vector<int> sample(int a, int b) {
std::vector<int> data(a);
// 初始化数据
for (int i = 0; i < a; i++) {
data[i] = i;
}
// 使用洗牌算法
std::random_device rd;
std::mt19937 gen(rd());
for (int i = 0; i < b; i++) {
std::uniform_int_distribution<> dis(i, a - 1);
int j = dis(gen);
std::swap(data[i], data[j]);
}
// 取出前b个数
std::vector<int> result(data.begin(), data.begin() + b);
return result;
}
int main() {
int a = 10; // 数据总数
int b = 5; // 取出的数的数量
std::vector<int> sampled = sample(a, b);
// 输出取出的数
std::cout << "Sampled numbers: ";
for (int num : sampled) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
在上述代码中,`sample`函数接受两个参数,分别是数据总数`a`和需要取出的数的数量`b`。它首先初始化一个包含0到a-1的数组,然后使用洗牌算法从中取出b个数,并返回取出的数作为结果。
注意:这里使用了C++11中的随机数库,确保你的编译环境支持该库。