【问题标题】:How to get value of enums when filling struct/class填充结构/类时如何获取枚举值
【发布时间】:2016-11-26 16:41:43
【问题描述】:

作为一个初学者,我遇到了一件相当困难的事情......我想用随机生成的信息填充这个结构

struct bunny {
bool is_vampire;
std::string name;
std::string color;
char gender;
int age;
int birth_date;
};

例如,我想使用枚举

enum colors{white, brown, black, spotted};

当我初始化一些结构时,我会创建一个函数

void struct_fill(bunny x)
{   
x.is_vampire = rand()%2;
x.color = colors(rand() % 11);
..... etc.
}

但我认为如果我使用一个数字,它会返回该数字所代表的值 /如果可以说数字2是黑色的/ ...有什么简单的解决方案吗?或者用从一些选择中随机选择的数据填充结构的其他方式? *我为我的英语道歉

【问题讨论】:

  • 您看到错误消息了吗?
  • 由于colorstd::string 类型,你不能用枚举来做到这一点。您将需要 std::vector<std::string> 之类的东西并随机选择一个索引。
  • 哦,好吧,我想我误解了为什么存在枚举并以它们的用途使用它,谢谢
  • 您是否希望将enum 转换为文本?
  • 您可以将color 的类型从string 更改为colors

标签: c++ struct enums


【解决方案1】:

颜色技巧的几种方法。最简单的大概是

std::vector<std::string> colors{"white", "brown", "black", "spotted"};

然后

x.color = colors[rand() % colors.size()];

由于颜色不太可能在运行时改变,std::string(甚至const char *)的数组可能更有效。不过,要获得大小有点棘手。

在此期间,我可以与您联系 giving std::uniform_int_distribution a read,看看它是否比 rand 更适合您?

【讨论】:

  • 嘿,谢谢!我让它工作了,我查看了 uniform_int_distribution ,除了你可以使用任何你想要的 int 间隔之外,rand 之间还有其他区别吗?无论如何,我猜它看起来比 rand 好,再次感谢。
  • 最大的不同是你现在可能不会太在意:新的随机数生成器比旧的要好得多。 rand 旨在解决 1970 年代的问题。很有可能在 2050 年 uniform_int_distribution 将被视为只适合野蛮人的工具。
  • 好的,开始使用 uniform_int_distribution。谢谢
  • 等等,我正在尝试使用统一的东西,它相当......很多东西要输入等等,我不知道它们是什么意思,也找不到成功的答案......当我输入 std::uniform_int_distribution&lt;&gt; dis(0, 1); 和然后dis(gen),然后我只有从0到1的数字。如果我想在网上有不同的间隔,我必须再次输入std::uniform_int_distribution&lt;&gt; dis(0, 5);?然后dis(gen) ?.. 看起来过于复杂
  • @Kajm 如果您需要两个发行版,请制作两个。 std::uniform_int_distribution&lt;&gt; disZeroOne(0, 1);std::uniform_int_distribution&lt;&gt; disZeroFive(0, 5); 为了简单起见,我将其设置为:stackoverflow.com/a/31061880/4581301
猜你喜欢
  • 2021-05-31
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多