enum数据结构

枚举(enumeration)是C++中的一种用户自定义数据类型,它允许为一组整数赋予有意义的名称。枚举类型的主要目的是提高代码的可读性和可维护性。

枚举类型用关键字enum定义。以下是一个简单的枚举类型示例:

enum Color {
    RED,
    GREEN,
    BLUE
};

在这个示例中,我们定义了一个名为Color的枚举类型,它有三个枚举常量:RED,GREEN和BLUE。默认情况下,枚举常量的值从0开始,依次递增。因此,RED的值为0,GREEN的值为1,BLUE的值为2。

您可以为枚举常量指定特定的值。例如:

enum Color {
    RED = 1,
    GREEN = 3,
    BLUE = 5
};

在这个示例中,RED的值为1,GREEN的值为3,BLUE的值为5。

要在程序中使用枚举类型,可以像使用其他数据类型一样声明枚举类型的变量:

Color myColor;

然后,可以为变量分配枚举常量:

myColor = RED;

还可以将枚举类型与条件语句和循环结构一起使用,以便根据不同的枚举值执行不同的操作。

以下是一个更详细的示例,演示了如何使用枚举类型来表示一周中的工作日和周末:

#include <iostream>
using namespace std;

enum Day {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

bool isWeekday(Day day) {
    return day >= MONDAY && day <= FRIDAY;
}

bool isWeekend(Day day) {
    return day == SATURDAY || day == SUNDAY;
}

string dayToString(Day day) {
    switch (day) {
        case MONDAY:    return "Monday";
        case TUESDAY:   return "Tuesday";
        case WEDNESDAY: return "Wednesday";
        case THURSDAY:  return "Thursday";
        case FRIDAY:    return "Friday";
        case SATURDAY:  return "Saturday";
        case SUNDAY:    return "Sunday";
        default:        return "Invalid day";
    }
}

int main() {
    Day today = WEDNESDAY;

    cout << "Today is " << dayToString(today) << endl;

    if (isWeekday(today)) {
        cout << "Today is a weekday." << endl;
    } else if (isWeekend(today)) {
        cout << "Today is a weekend." << endl;
    }

    // Using a loop to iterate over the enum values
    for (int i = MONDAY; i <= SUNDAY; i++) {
        Day day = static_cast<Day>(i);
        cout << dayToString(day) << " is " << (isWeekday(day) ? "a weekday" : "a weekend") << endl;
    }

    return 0;
}
  • 在这个示例中,我们定义了一个名为Day的枚举类型,用于表示一周中的七天。然后,我们创建了三个辅助函数:isWeekday()、isWeekend()和dayToString(),分别用于判断给定的天是否为工作日、是否为周末以及将枚举值转换为字符串表示。
  • 在main()函数中,我们声明了一个Day类型的变量today,并为其分配了一个值。然后,我们使用辅助函数来输出有关today的信息。
  • 此外,我们还演示了如何使用循环遍历枚举值。请注意,在这种情况下,我们需要使用static_cast将整数值转换为枚举类型。这是因为枚举类型在底层其实是整数类型,但C++不会自动将整数值转换为枚举类型,因此需要进行显式类型转换。
  • 这个示例展示了如何使用枚举类型创建更具可读性和可维护性的代码。希望这个示例能帮助您更好地理解枚举类型的用途和优势。

强枚举类型(C++11 新特性)

从C++11开始,还引入了一种名为“强类型枚举”(也称为“枚举类”)的新枚举类型,它使用关键字enum class定义。强类型枚举提供了更好的类型安全性和作用域限制,因此建议在新代码中使用强类型枚举。

以下是一个强类型枚举的示例:

enum class Color {
    RED,
    GREEN,
    BLUE
};

要使用强类型枚举,需要通过作用域解析运算符(::)访问枚举常量:

Color myColor = Color::RED;

总结

我们只能给枚举类的对象,去赋予枚举类里面的值(枚举成员)

总之,枚举类型是一种有用的C++特性,可以帮助您为整数值分配有意义的名称,从而提高代码的可读性和可维护性。在现代C++中,建议使用强类型枚举以获得更好的类型安全性和作用域限制。