使用枚举的一些好例子

Qui*_*tic 8 c c++ enums

当我学习C时我学会了枚举,并不时地提醒自己,并且大部分时间通过从某些来源重新阅读,我发现这是因为我从未在编程中使用它,我的编程兴趣集中在算法问题解决上,所以我不确定在哪里可以使用枚举.

有人可以提出一些很好的例子,使用枚举可以让事情变得简单吗?

我会赞赏算法示例,但欢迎算法或非算法示例.

dso*_*ano 20

想象一下,您正在编写深度优先搜索,并且您想要标记边缘是否为树,后,前或交叉.您可以使用四种可能性创建枚举EDGE_TYPE,并使用它来标记边缘.

  • 你好downvoter.你不喜欢我的答案吗? (4认同)

Boj*_*zec 19

在描述/观察某个系统的某些属性时,您可能会发现该属性可以包含有限集中的任何值.命名这些值,为每个值分配一个整数值(代码),在枚举中收集它们,并定义该属性的类型.考虑该属性的所有操作现在都可以使用此类型.

示例:对于某些系统,我们可以将其状态视为其属性之一.我们可以观察它并说它可以处于"未初始化"状态,"初始化"状态,"活动"状态或"空闲"状态(可以在这里添加更多状态......).如果要对该系统执行某些操作但取决于当前状态,您将如何将状态信息传递给该操作(函数)?您可以传递字符串'未初始化','初始化'...但是如果您只从集合中传递一个整数,则更有效,更简单且更安全.

enum State
{
   Uninitialized,
   Initialization,
   Active,
   Idle
};
Run Code Online (Sandbox Code Playgroud)

该函数将State作为参数,并且在根据当前状态决定做什么时可以使用switch:

void foo(..., const State state,...)
{
   ...
   switch(state)
   {
      case Uninitialized:
          cout << "Uninitialized" << endl;
          break;
      case Initialization:
          ...
   }
   ...
}
Run Code Online (Sandbox Code Playgroud)

使用枚举类型来描述一组有限的属性值比使用一组#defines和整数变量更安全.例如,如果你有:

#define UNINITIALIZED  0
#define INITIALIZATION 1
#define ACTIVE         2
#define IDLE           3
Run Code Online (Sandbox Code Playgroud)

int nState;
Run Code Online (Sandbox Code Playgroud)

没有什么可以阻止你为nState分配任何整数值:

nState = 4; // What state is 4?
Run Code Online (Sandbox Code Playgroud)

如果使用枚举:

State state;
Run Code Online (Sandbox Code Playgroud)

你不能给它分配一个任意整数值但只能给它一个枚举器(虽然枚举的基础类型是整数! - 见这个):

state = Active;
Run Code Online (Sandbox Code Playgroud)


thb*_*sch 8

我使用它们作为函数的参数,而不是使用布尔值来提高我的代码的可读性.