dso*_*ano 20
想象一下,您正在编写深度优先搜索,并且您想要标记边缘是否为树,后,前或交叉.您可以使用四种可能性创建枚举EDGE_TYPE,并使用它来标记边缘.
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)
| 归档时间: |
|
| 查看次数: |
70556 次 |
| 最近记录: |