c++ - 类构造函数“吃掉”值
问题描述
所以我试图为一个类运行这个 sim 程序,让我们使用集合构建一个 Bet 类。
这是类定义:
class Bet2{
private:
set<int> mainNumbers;
set<int> luckyNumbers;
public:
Bet2();
void show() const;
set<int> getMainNumbers();
set<int> getLuckyNumbers();
};
所以我决定使用随机库,因为他们在课堂上给我们的 rand() 函数在一次为 sim 创建一堆 Bet2 对象时会吐出相同的值。
但是,由于某种原因,它并没有吐出它应该吐出的值的数量。有时它会吐出 4 个主要数字(而不是 5 个),或者只是 1 个幸运数字(而不是 2 个)
这是构造函数的代码:
Bet2::Bet2() {
random_device rd;
uniform_int_distribution<int> main(1, 50);
for (int i = 0; i < 5; i++)
mainNumbers.insert(main(rd));
uniform_int_distribution<int> star(1, 12);
for (int i = 0; i < 2; i++)
luckyNumbers.insert(star(rd));
}
我在主函数中使用 uniform_int_distribution 和 random_device 运行了一些测试,它运行没有任何问题。出于某种原因,当我为我的 sim 初始化 Bet2 向量时,它会消耗值:
Main Numbers: 11 23 27 32 36
Star Numbers: 3 11
Main Numbers: 4 18 22 27 28
Star Numbers: 9 11
Main Numbers: 3 5 25 43 <-
Star Numbers: 1 <-
Main Numbers: 40 42 43 46 50
Star Numbers: 2 7
Main Numbers: 7 10 14 27 45
Star Numbers: 9 10
Main Numbers: 11 15 21 24 35
Star Numbers: 1 11
Main Numbers: 3 25 29 45 50
Star Numbers: 3 7
Main Numbers: 11 15 23 25 37
Star Numbers: 1 6
Main Numbers: 7 8 26 31 43
Star Numbers: 6 9
Main Numbers: 15 27 36 38 39
Star Numbers: 2 8
试图弄清楚uniform_int_distribution 不能生成值,但是网上没有找到任何东西。
提前致谢!
解决方案
std::set
最多只能存储给定值的 1 个副本。
缺少数字应该是因为随机数恰好与之前看到的数字相同。
如果要存储相同值的倍数,则应std::multiset
改为使用。
如果您想生成一组唯一的定义数量的值,最好先生成一个std::vector
候选值,然后再使用std::sample()
它。
推荐阅读
- sql - 使用 Postgres regexp_replace 屏蔽查询字符串参数值
- d3.js - 将 tspan 放在矩形 D3JS SVG 内
- google-apps-script - 使用脚本从 Google 表单打开一个新的 Google 电子表格文件
- azure - 如何更改现有 Azure 应用程序网关的 VNet 和子网?
- visual-studio - 将 Unity 应用程序提交到 Windows 商店
- rest - HATEOAS 不会增加 HTTP 请求吗?
- list - 如何在列表中搜索特定元素
- javascript - 如何使用 Eventbrite Api 查询特定城市特定日期的所有事件?
- android - 为什么真实设备上的xamarin android应用程序总是抛出错误但在模拟器上工作
- python - python 比较 datatime.time 和 datetime.timedelta