C++详解:枚举类型 --- enum | Xunlan_blog

2023-05-16

文章目录

  • 一、概念
  • 二、定义
    • 枚举元素表
  • 三、定义
    • 枚举对象的操作
  • 四、要点&技巧
  • 实例


一、概念

枚举类型 (enumeration),是C++中的一种派生数据类型,是用户创建的一个集合,可以增加程序的可读性,在一些需要重复用到一些元素时颇有益处。

二、定义

枚举类型的定义格式:

enum enum_name {/*enum_table*/};
enum enum_name {/*enum_table*/} enum_val;

其中:

  • enum :枚举类型关键字,声明后面定义的是枚举类型。
  • e n u m _ n a m e enum\_name enum_name :枚举名称,相当于class后面跟的类名称。
  • { e n u m _ t a b l e } \{enum\_table\} {enum_table} :枚举元素表,该枚举枚举类型仅能使用元素表中的 枚举元素(或称 枚举常量)。
  • e n u m _ v a l enum\_val enum_val :[可选] 声明枚举类型后,可以紧跟着一个枚举对象,也可以分开。如,以下两段代码作用一致:
    enum exam{a,b,c,d,e} stu1,stu2;
    
    enum exam{a,b,c,d,e};
    exam stu1,stu2;
    

枚举元素表

以下是一个正确的枚举类型声明:

enum week{MON,TUE,WED,THR,FRI,SAT,SUN};

以下是一个错误的枚举类型声明:

enum week{"MON","TUE","WED","THR","FRI","SAT","SUN"};

enum类型 不允许元素为字符常量、字符串常量、整型常量、浮点常量、布尔常量等字面常量(见常量)

元素间应以【,】隔开。

默认情况下,枚举类型的每个元素可以看作是数组元素,但元素的值为 从0开始 的索引。特别地,你可以在声明时对部分或所有元素索引赋值,对于赋值元素之前的元素,仍以原来的方式,对于赋值元素,变为所赋的值,对于之后的元素,从该元素索引+1开始。
或言之,将第一个元素赋值0,再将指定的元素赋值,然后从第2个元素起每个的值为上一个的值+1。

三、定义

定义一个枚举对象:

enum_type enum_val;
enum enum_type{/*enum_type*/} enum_val;//声明类型时同时定义

枚举对象的操作

  1. 枚举对象仅能取该类型中的值,即值 ∈ \in 该类型索引。
  2. 枚举变量占用内存与int一致。
  3. 枚举变量能且仅能参与赋值、比较、输出操作,参与运算时使用索引值。
    enum ex{a,b=3,c,d=0,e};//索引值:{0,3,4,0,1}
    ex stu1,stu2;
    stu1=a,stu2=c;//赋值
    std::cout << stu1 << ' ' << stu2 << std::endl;//输出:0 4\n
    int i1=stu1,i2=stu2;
    printf("%d %d\n",i1,i2);//输出:0 4\n
    bool b=stu1<stu2;//true
    
    stu2=d;
    cout<<(stu1==stu2)? "equal!\n" : "not equal!\n" //输出:equal!\n
    

四、要点&技巧

  1. 不同类型枚举常量不能相互赋值(即使指向元素一样),同类型则可以:
    enum ex1{a,b,c} stu1,stu2;
    enum ex2{a,d,e} stu3;
    stu1=a;
    stu2=stu1;//合法
    stu3=stu1;//非法
    
  2. 枚举变量可以输出不能输入:
    ex stu1;
    cin>>stu;//非法
    ex stu2=a;
    cout<<stu2;//合法
    
  3. 因为枚举变量输出的是索引,可以使用switch(){}语句转换成字符串:
    enum ex{a,b,c,d,e} stu;
    stu=c;
    cout<<stu<<endl;
    switch(stu){
    	case a:	cout<<'a';break;
    	case b:	cout<<'b';break;
    	case c:	cout<<'c';break;
    	case d:	cout<<'d';break;
    	case e:	cout<<'e';
    }
    /*输出:
    ---
    2
    c
    ---
    */
    

实例

题目:

口袋中有红、黄、蓝、白、黑五种颜色的球若干个,每次从口袋中取三个不同颜色的球,统计并输出所有的取法。

#include<bits/stdc++.h>
using namespace std;

signed main(){
	enum color{red,yellow,blue,white,black} choose;
	int i,j,k,cnt=0,loop;//i,j,k为三种球
	for(i=red;i<=black;++i){
		for(j=red;j<=black;++j){
			if(i==j) continue; //确保不一样
			for(k=red;k<=black;++k){
				if(k==i||k==j) continue;
				cnt++;
				if(!(cnt%22)){
					system("pause");//每22行暂停一下。
				}
				cout<<setw(15)<<cnt;
				//开始输出选法
				for(loop=1;loop<=3;++loop){
					switch(loop){
						case 1: choose=(color)i;break;
						case 2: choose=(color)j;break;
						default: choose=(color)k;
					}//三次输出i、j、k。
					switch(choose){
						case red:   	cout<<setw(15)<<"red";   break;
                        case yellow:	cout<<setw(15)<<"yellow";break;
                        case blue:  	cout<<setw(15)<<"blue";  break;
                        case white:		cout<<setw(15)<<"white"; break;
                        case black: 	cout<<setw(15)<<"black"; break;
					}
				}
				cout<<endl;//换行
			}
		}
	}
	cout<<"total:"<<cnt;
	return 0;
}

result:

              1            red         yellow           blue
              2            red         yellow          white
              3            red         yellow          black
              4            red           blue         yellow
              5            red           blue          white
              6            red           blue          black
              7            red          white         yellow
              8            red          white           blue
              9            red          white          black
             10            red          black         yellow
             11            red          black           blue
             12            red          black          white
             13         yellow            red           blue
             14         yellow            red          white
             15         yellow            red          black
             16         yellow           blue            red
             17         yellow           blue          white
             18         yellow           blue          black
             19         yellow          white            red
             20         yellow          white           blue
             21         yellow          white          black
按任意键继续...
             22         yellow          black            red
             23         yellow          black           blue
             24         yellow          black          white
             25           blue            red         yellow
             26           blue            red          white
             27           blue            red          black
             28           blue         yellow            red
             29           blue         yellow          white
             30           blue         yellow          black
             31           blue          white            red
             32           blue          white         yellow
             33           blue          white          black
             34           blue          black            red
             35           blue          black         yellow
             36           blue          black          white
             37          white            red         yellow
             38          white            red           blue
             39          white            red          black
             40          white         yellow            red
             41          white         yellow           blue
             42          white         yellow          black
             43          white           blue            red
按任意键继续...
             44          white           blue         yellow
             45          white           blue          black
             46          white          black            red
             47          white          black         yellow
             48          white          black           blue
             49          black            red         yellow
             50          black            red           blue
             51          black            red          white
             52          black         yellow            red
             53          black         yellow           blue
             54          black         yellow          white
             55          black           blue            red
             56          black           blue         yellow
             57          black           blue          white
             58          black          white            red
             59          black          white         yellow
             60          black          white           blue
total:60

按任意键关闭此窗口. . .

根据乘法原理, t o t a l = 5 × 4 × 3 = 60 total=5\times4\times3=60 total=5×4×3=60,故代码无误。


@HaohaoCppDebuger|寻兰 
2021/11/16 

-----THE END-----
THANK YOU !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++详解:枚举类型 --- enum | Xunlan_blog 的相关文章

  • C++枚举类型enum使用方法(附带可用代码+通俗易懂)

    1 说明 枚举用来表示某类事情的结果 xff1b 例1 xff1a 下棋比赛的三种结果 xff0c 赢 xff0c 和 xff0c 输 xff1b 这里是描述比赛的结果 例2 xff1a 一周7天中的俩种结果 xff0c 工作日和非工作日
  • java枚举(enum)使用详解

    文章目录 前言一 枚举类型定义二 访问成员三 遍历四 在switch xff08 xff09 中使用枚举五 方法1 内置方法1 1 ordinal 用于返回成员的索引1 2 compareTo 用于比较枚举类型中两个成员的索引值1 3 va
  • 開始在csdn上寫blog

    哈哈 現在開始寫些技術性的文字啦
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中
  • java enum(枚举)使用详解 + 总结

    enum 的全称为 enumeration xff0c 是 JDK 1 5 中引入的新特性 xff0c 存放在 java lang 包中 下面是我在使用 enum 过程中的一些经验和总结 xff0c 主要包括如下内容 xff1a 1 原始的
  • Java枚举的使用

    枚举类型可以取代以往常量的定义方式 即将常量封装在类或接口中 此外 枚举类型还提供了安全检查功能 枚举类型本质上还是以类的形式存在 1 使用枚举类型设置常量 以往设置常量 通常将常量放置在接口中 这样在程序中就可以直接使用了 并且该常量不能
  • 单链表的插入和删除

    前言 在上一篇文章 单链表的定义 中我们已经了解了单链表的含义和简单的实现 那么在这篇文章中 我们将要来讲解单链表的插入和删除操作 按位序插入 带头结点 我们在上篇文章中已经讲解过 如果想要在表L中的第i个位置上插入指定元素e 我们需要找到
  • Mac下使用GitHub+Hexo搭建个人博客

    首发链接 开始之前需要在电脑上安装好Git和node js Mac上可以使用Homebrew命令行工具来安装Git和node js 安装Homebrew 在命令行工具输入以下命令 如果已经安装过Homebrew可以忽略 usr bin ru
  • C++枚举类型用法总结(enum)(可以用枚举字符常量代替常量)

    C 枚举类型enum表示枚举 通常用于定义个新类型的字符常量 比如enum January February March 枚举类型的作用域一般是整个文件或者类内 当枚举类型定义在文件开头时 则作用域是从定义位置开始往后 不包括函数内定义 当
  • ESOE之最后一篇

    ESOE 项目现已完成0 2版 并开辟了一个站点放置 因此作者不会再在这里进行更新了 感兴趣的朋友请访问 http www viviasoft com esoe home gb index htm 第一次以网志形式计划一个项目 多谢cdsn
  • Silverlight 1.1正式更名为Silverlight 2.0

    2007年11月30日 10 18 24 详情请参看下面两篇Blog http weblogs asp net scottgu archive 2007 11 29 net web product roadmap asp net silve
  • Feedsky 上 csdn blog 订阅数排名 (zz)

    1114356 programmer editor http blog csdn net programmer editorhttp feeds feedsky com csdn net programmer editor 23897 po
  • C# 枚举 enum(学习心得 17)

    枚举是一组命名整型常量 枚举类型是使用 enum 关键字声明的 C 枚举是值类型 枚举包含自己的值 且不能继承或传递继承 超级小白友好 讲解C 基础 每集5分钟轻松学习 拒绝从入门到放弃 声明 enum
  • 基于Jekyll创建免费的静态博客站点

    完整版请参考 https mazhaoxin github io 2018 08 04 Create Free Static Blog Base On Jekyll http 483v7j coding pages com 2018 08
  • 场景间切换与数据传递(以及物体删除技巧)

    先介绍一些基本函数 具体用法自己查文档 1 场景切换 Application LoadLevel Level1 2 读取场景时不移除物体 DontDestroyOnLoad object 会保留该物体的任何数据 包括坐标 可以用于任何物体
  • java.io.IOException: Invalid header signature; rea

    异常 java io IOException Invalid header signature read 4503608217567241 expected 2226271756974174256 資料來源 http hi baidu co
  • 名人博客VS 博客名人

    不知从什么时候开始 似乎人人都成了blogger 有用的 没用的 快乐的 悲伤的 都会在自己的博客上贴出来 而那些曾经让我们感觉遥不可及的明星们也开始通过博客传递最新动态甚至爆料隐情 由此便催生了一系列跟博客相关的网络词汇 celeblog
  • 【chatGPT】让java程序员工作效率翻10倍技巧

    本来写给我自己用来着 想着以后忘记了就分享出来 1 写枚举 对于程序员来说枚举的命名需要大写并且写枚举也是被迫的 大部分人的感受都一样啊喂 所以可以直接用chatgpt偷懒 录入关键字 例 帮我写个java枚举 xxxxx 活动兑奖状态 0
  • 个人博客 blog

    介绍 blog是基于springboot搭建的个人博客 响应式 项目地址 https github com chy1984 blog 前端技术 html css js jq bootstrap 后台技术 springboot thymele
  • 浅谈Java Enum作用与应用场景

    在实际应用中 有的变量只有几种可能取值 如人的性别只有两种可能取值 星期只有七种可能取值 在 Java语言中对这样取值比较特殊的变量可以定义为枚举类型 所谓枚举是指将变量的值一一列举出来 变量只限于列举出来的值的范围内取值 枚举是一个特殊的

随机推荐

  • [Linux]LVM (Linux 逻辑卷管理)

    概念 xff1a LVM是 Logical Volume Manager xff08 逻辑卷管理 xff09 的简写 xff0c 它是Linux环境下对磁盘分区进行管理的一种机制 PV xff1a 硬盘和分区都可以标记为PV xff0c P
  • [CentOS入门](二)Linux Bash

    Bash命令 xff1a Shell是用户与操作系统交互的入口 xff0c Bash是最常用的Linux Shell Bash命令格式 xff1a 命令 选项 参数 中间用空格分隔 命令选项参数ls lh var 如果参数中包含空格则需要在
  • 逻辑回归(LogisticRegression)算法及简单案例

    逻辑回归 LogisticRegression 算法及简单案例 大家好 xff0c 我是W 逻辑回归虽然名字有回归 xff0c 但是实际上是分类模型 xff0c 常用于二分类 回归的意思是 xff1a 在二维空间中找到一条最佳拟合直线去拟合
  • [CentOS入门](三)文件系统

    Linux文件系统结构树 xff1a 目录中颜色的含义 xff1a 青色 xff1a 指向另外一个位置 xff0c 软连接 ls显示文件夹中的文件链接指向位置 xff1a ls folder l蓝色 xff1a 一个文件夹绿色 xff1a
  • [CentOS入门](四)编辑器

    vim xff1a vi vim是一种Linux自带的文本编辑器 xff0c 也是常用的文本编辑器之一 xff0c vim相对于vi增加了代码颜色等功能 部分Linux最小化安装时会预装vi xff0c 但不包含vim xff0c 手动安装
  • [CentOS入门](五)系统软件管理

    RPM RPM是由红帽开发 xff0c 用于管理软件包的组件 xff0c 但是其原始设计理念是开放式的 xff0c 包括OpenLinux S u S E 以及Turbo Linux等Linux的分发版本都有采用 rpm是软件的最小单位 r
  • [CentOS入门](六)用户、组、权限

    用户 xff1a 用户ID为0的用户为超级用户 xff0c 0 500之间为系统级用户 xff0c 为服务保留 xff0c 通常情况新建的用户UID gt 500 用户文件保存在 etc passwd文件中 组 xff1a 每个用户有一个私
  • Traccar记录足迹-服务搭建及使用

    Traccar介绍 Traccar是一款开源的可以跟踪GPS设备位置的应用 xff0c 服务端支持Windows x64 Linux x64 Linux ARM 客户端支持GPS设备 Android设备 IOS设备 搭建Traccar服务器
  • [网络]OSPF理论

    特性 xff1a 分类 xff1a 无类 xff0c 链路状态协议封装 xff1a ip xff08 89 xff09 更新目标地址 xff1a 224 0 0 5 224 0 0 6 支持单播更新方式 xff1a 定时 完整定时更新 xf
  • [网络]IPV6

    IPV6优势 xff1a 更大地址空间 xff08 2 128 xff09 端到端的全球可达性层次化编址利于聚合 xff08 每个运营商一个地址块 xff09 组播的使用 xff08 Server传播一份流量 xff0c 通过组播扩散到用户
  • Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台 它在单个平台上紧密集成了KVM虚拟机管理程序和LXC xff0c 软件定义的存储以及网络功能 借助基于Web的集成用
  • [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运

    Boeing B737 800X mod 链接中包括XPlane11和XPlane12版 XPlane11版本已更新至3 54 17 xff1b XPlane12版本已更新至2 1 一 下载链接 xff1a 捐助ZIBOmod xff1a
  • Proxmox VE(PVE)备份组件:PBS(Proxmox Backup Server)部署及使用教程

    1 Proxmox Backup Server xff08 pbs xff09 介绍 Proxmox Backup Server xff08 pbs xff09 是与pve配套的备份解决方案 xff0c 用于备份和恢复虚拟机 容器和物理主机
  • maven mirror

    lt mirror gt lt id gt UK lt id gt lt name gt UK Central lt name gt lt url gt http uk maven org maven2 lt url gt lt mirro
  • 1002 A+B for Polynomials (25分)

    题目大意 输入两行 xff0c 每行格式如上 xff0c K为多项式中非零项的个数 xff0c N为指数 xff0c aN为该项的系数 最后输出两个多项式的和 思路 xff1a 用一个结构体数组 ploy xff0c 数组中的每个元素存储该
  • linux/unix 使用airport

    把airport引入到用户命令里 xff0c 建立一个软连接 span class hljs built in sudo span ln span class hljs operator s span System Library Priv
  • 网页中提取SWF游戏文件及运行修改

    1 下载游戏到本地 以4399游戏为例 首先需要找到游戏页面如下 xff1a
  • k8s快速部署,附带脚本

    内容导航 xff08 一 xff09 资产信息 xff08 二 xff09 脚本内容 xff08 三 xff09 网络插件flannel1 xff0c 使用flannel网络插件2 xff0c 修改网络模式为ipvs xff0c svc无法
  • pandas处理大文件

    目录 思路一 xff1a 分而治之 思路二 xff1a 精简数据 demo 思路一 xff1a 分而治之 分而治之 xff0c 分批次加载大文件 xff0c 每次读取一定行数的数据 xff0c 读一批处理一批 此方法简单有效 xff0c 易
  • C++详解:枚举类型 --- enum | Xunlan_blog

    文章目录 一 概念二 定义枚举元素表 三 定义枚举对象的操作 四 要点 amp 技巧实例 一 概念 枚举类型 enumeration xff0c 是C 43 43 中的一种派生数据类型 xff0c 是用户创建的一个集合 xff0c 可以增加