首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成随机枚举

生成随机枚举
EN

Stack Overflow用户
提问于 2010-06-08 23:55:52
回答 3查看 22.9K关注 0票数 17

如何在C++中随机选择枚举类型的值?我想做这样的事情。

代码语言:javascript
运行
复制
enum my_type(A,B,C,D,E,F,G,h,J,V);
my_type test(rand() % 10);

但这是非法的..。不存在从int到枚举类型的隐式转换。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-08 23:58:45

这样如何:

代码语言:javascript
运行
复制
enum my_type {
    a, b, c, d,
    last
};

void f() {
    my_type test = static_cast<my_type>(rand() % last);
}
票数 29
EN

Stack Overflow用户

发布于 2010-06-09 00:03:06

没有隐式转换,但可以使用显式转换:

代码语言:javascript
运行
复制
my_type test = my_type(rand() % 10);
票数 9
EN

Stack Overflow用户

发布于 2019-06-24 18:48:36

下面是我最近是如何解决类似问题的。我将其放在一个适当的.cc文件中:

代码语言:javascript
运行
复制
static std::random_device rd;
static std::mt19937 gen(rd());

在定义枚举的标头中:

代码语言:javascript
运行
复制
enum Direction
{
    N,
    E,
    S,
    W
};
static std::vector<Direction> ALL_DIRECTIONS({Direction::N, Direction::E, Direction::S, Direction::W});

并生成一个随机方向:

代码语言:javascript
运行
复制
Direction randDir() {
    std::uniform_int_distribution<size_t> dis(0, ALL_DIRECTIONS.size() - 1);
    Direction randomDirection = ALL_DIRECTIONS[dis(gen)];
    return randomDirection;
}

别忘了

代码语言:javascript
运行
复制
#include <random>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2999012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档