【发布时间】:2013-03-14 14:05:52
【问题描述】:
我有一个枚举,我想将它们全部放入集合中(然后使用 set_intersection 算法删除一些,但这是题外话)。 除了我卡在第 1 步之外,一切都很好。:)
如果我有(真实类有更高基数的枚举)
class MyClass
{
enum Color{red, green , blue}
};
我将如何初始化 std::set<MyClass::Color> 以包含所有枚举。
我显然可以一个一个地手动插入它们,使用强制转换进行 for 循环,因为它们是连续的并且从 0 开始(我认为如果我在枚举定义中不使用 = 是必需的),但我正在寻找一种更优雅的方式。
编辑:如果可能,我更喜欢 C++03 解决方案,因为当前的问题实例需要它,但如果不是,C++11 也很高兴知道。
【问题讨论】:
-
如果它们是连续的并且从零开始,您可以添加
total作为最后一个枚举元素,其值等于值的数量=) -
来自@kassak
total或colors_count的好话作为枚举的最后一个元素在许多情况下非常有用 -
@kassak 我知道这个技巧,但这取决于 CAPS LOCK cmets 阻止 ppl 去定义每个枚举的 int 值。 :)