枚举是种特殊的数据类型,也可以理解为它代表整形数据int
既然它某种程度上就等于int,为何还要多此一举?
假设现在你利用数组创建了一个万人的成绩单,并且每个人的位置创建完就保持不动,只能修改成绩。你当然可以用0~9999来索引每个人的成绩,又假设你记忆很好,创建完当天你居然能记住所有人的索引,我让你修改Shan的成绩,你记得她的idx为413,然后你就操作scores[413]=99
,出色的完成了任务。但是一个星期之后我发现某些成绩不对,再次需要修改,你还能清楚地记得所有人对应的idx吗?(不能用哈希表作弊)如果不能,枚举值能很好地帮助我们,你只要知道名字,用名字做索引,就能准确索引到她的成绩并修改。
不难发现,在索引的对象有一定的个性信息时,相对于一个整形索引0,1,2…,枚举类型能更加直观地反映这种信息,有效地防止错误索引。
如果有点迷糊的请看下面↓ ↓ ↓ ↓ ↓ ↓
详细的代码和注释
#include<iostream>
using namespace std;
int main()
{
//初始化枚举类型Stu,相当于我们平常用的int、char、string等
// 不同的是枚举类型取值范围只有{}里面这些。
enum Stu {Tom,Jenny,Gogo}; //Tom=0,Jenny=1,Gogo=2
//enum Stu { Tom=2, Jenny, Gogo }; Tom=2,Jenny=3,Gogo=4
Stu students;//初始化变量students,该变量只能被赋值为Tom,Jenny,Gogo这三种
students = Gogo;
cout << "枚举类型布尔判断" << endl;
cout << "students是否是Gogo? " <<(students== Gogo)<< endl; //既可以和枚举类型比较
cout << "students是否2? "<<(students== 2)<< endl; //也可以和数值类型(int float等)比较
cout << "students是否是Jenny? " << (students== Jenny)<< endl;
cout << "students是否大于2? " << (students > 2) << endl; //也可以和数值类型(int float等)比较
cout << "用枚举值索引并修改数组元素" << endl;
int scores[] = { 59,90,70 };
scores[Jenny] = 99; //除了初始化要索引值对应,以后赋值无需知道索引值也可以修改三个人的分数
for (int i = 0; i < 3; i++)
{
cout << scores[i] << "\t";
}
cout << endl;
return 0;
}