7

我有一个枚举,我想把它们都放在集合中(然后用 set_intersection 算法删除一些,但那是题外话)。一切都很好,除了我坚持第 1 步。:)

如果我有(真正的班级有更高基数的枚举)

class MyClass
{
enum Color{red, green , blue}
};

我将如何初始化 astd::set<MyClass::Color> 以包含所有枚举。
我显然可以一个一个地手动插入它们,使用强制转换进行 for 循环,因为它们是连续的并且从 0 开始(如果我在枚举定义中不使用 =,我认为这是必需的),但我正在寻找一种更优雅的方式。

编辑:如果可能,我更喜欢 C++03 解决方案,因为当前的问题实例需要它,但如果不是,C++11 也很高兴知道。

4

3 回答 3

8

这是一个选项:

#define COLORS {red, green , blue}
enum Color COLORS;
static std::set<Color> color_set() {
    return COLORS;
}
#undef COLORS
于 2013-03-14T14:11:07.097 回答
4

使用std::bitset< total_colors >. 对于有限空间上的集合,这是更合适的数据结构。每种颜色都映射到一个布尔值,表示它是否是集合的一部分。您可以将其初始化为所有true的使用my_bitset.set()

于 2013-03-14T14:28:09.487 回答
0

就我个人而言,我会使用一个循环,并在我去的时候把东西扔掉。

但是,如果您对强制转换不满意,您可以在枚举上定义运算符,以便您可以使用++. 这样你就可以在不强制转换的情况下循环。

于 2013-03-14T14:40:37.197 回答