C++ 枚举(enum)数据结构相关知识

news/2024/10/31 7:30:41/

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 valuesfor (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++中,建议使用强类型枚举以获得更好的类型安全性和作用域限制。


http://www.ppmy.cn/news/40673.html

相关文章

磁盘调度算法习题

注意&#xff08;不论被访问的下一个磁道号是几&#xff0c;计算移动距离都是&#xff1a;大数减小数&#xff09; 一&#xff0e;磁盘共有200个柱面(0-199)&#xff0c;它刚刚从92号磁道移到98号随道完成读写&#xff0c;假设此时系统中等待访问磁盘盘的磁道序列为190&#xf…

Python 判断闰年、Python 平方根

Python 判断闰年 以下实例用于判断用户输入的年份是否为闰年&#xff1a; # -*- coding: UTF-8 -*-# Filename : test.py # author by : www.w3cschool.cnyear int(input("输入一个年份: ")) if (year % 4) 0:if (year % 100) 0:if (year % 400) 0:print("…

REVA首届世界巡回交流会——澳门站 亚太峰会!

近日金融相关媒体报道:REVA亚太峰会将定于2023年5月8日—5月10日在澳门举行为期三天的会议交流,本次峰会由REVA主办,这一次的亚太峰会是疫情放开后国内外互联网市场交流的良好契机,也加速推动着国家和地区间互联网的经济、技术交流与合作。此次首战澳门亚太峰会会议,将拉开Reva…

Python结合OpenAI的GPT-3 API做数据分析

本文使用了OpenAI的GPT-3 API来生成数据分析报告。GPT-3是一种基于深度学习的自然语言处理模型&#xff0c;可以生成高质量的自然语言文本。在本示例中&#xff0c;我使用GPT-3来分析给定的CSV文件中的数据&#xff0c;并生成相应的报告。 以下是完整的Python代码示例&#xf…

使用Comparator 对List<Map>格式不严格字段排序

public static void main( String[] args ){String col1 "time";String col2 "num";//双数据源的集合ArrayList<Map> lists produceData(col1, col2);//对双数据源集合惊醒排序 这里2个字段的灵活配置升序降序SortBy2Cols(lists,col1,OrderType.D…

第九章 且慢,弄清索引之阻碍让SQL飞

参考《收获&#xff0c;不止SQL优化》作者: 梁敬彬 / 梁敬弘 一、 索引的不足之处 二、 索引的取舍 三、 结合案例 四、 习题 习题1&#xff1a; &#xff08;1&#xff09; SQL写法导致&#xff1a;列上加函数、列隐式类型转换、HINT固定全表扫描 &#xff08;2&#xff09; S…

OpenCV实战(14)——图像线条提取

OpenCV实战(14)——图像线条提取 0. 前言1. 检测图像轮廓1.1 图像轮廓1.2 使用 Canny 算子检测图像轮廓2. 使用霍夫变换检测图像中的线条2.1 线条的表示2.2 霍夫变换检测直线2.3 概率霍夫变换2.4 霍夫变换与概率霍夫变换对比2.5 霍夫变换检测圆3. 完整代码小结系列链接0. 前言…

【第二节】- Idea本地调试提交Flink程序

1、下载Flink tar包: 解压,查看对应的flink.sh脚本: #!/usr/bin/env bash ################################################################################ # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements…