我如何迭代枚举?

我如何迭代枚举?

我只是注意到你不能在枚举上使用标准数学运算符,如++或+ =

那么迭代C ++枚举中所有值的最佳方法是什么?


温温酱
浏览 606回答 3
3回答

慕尼黑的夜晚无繁华

典型的方法如下:enum&nbsp;Foo&nbsp;{ &nbsp;&nbsp;One, &nbsp;&nbsp;Two, &nbsp;&nbsp;Three, &nbsp;&nbsp;Last};for&nbsp;(&nbsp;int&nbsp;fooInt&nbsp;=&nbsp;One;&nbsp;fooInt&nbsp;!=&nbsp;Last;&nbsp;fooInt++&nbsp;){ &nbsp;&nbsp;&nbsp;Foo&nbsp;foo&nbsp;=&nbsp;static_cast<Foo>(fooInt); &nbsp;&nbsp;&nbsp;//&nbsp;...}当然,如果指定了枚举值,这会分解:enum&nbsp;Foo&nbsp;{ &nbsp;&nbsp;One&nbsp;=&nbsp;1, &nbsp;&nbsp;Two&nbsp;=&nbsp;9, &nbsp;&nbsp;Three&nbsp;=&nbsp;4, &nbsp;&nbsp;Last};这说明枚举并不是真正意义上的迭代。处理枚举的典型方法是在switch语句中使用它。switch&nbsp;(&nbsp;foo&nbsp;){ &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;One: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Two:&nbsp;&nbsp;//&nbsp;intentional&nbsp;fall-through &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Three: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Four: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;.. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assert(&nbsp;!&nbsp;"Invalid&nbsp;Foo&nbsp;enum&nbsp;value"&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;}如果你真的想要枚举,将枚举值填入向量中并迭代它。这也将适当地处理指定的枚举值。

慕容森

#include <iostream>#include <algorithm>namespace MyEnum{&nbsp; enum Type&nbsp; {&nbsp; &nbsp; a = 100,&nbsp; &nbsp; b = 220,&nbsp; &nbsp; c = -1&nbsp; };&nbsp; static const Type All[] = { a, b, c };}void fun( const MyEnum::Type e ){&nbsp; std::cout << e << std::endl;}int main(){&nbsp; // all&nbsp; for ( const auto e : MyEnum::All )&nbsp; &nbsp; fun( e );&nbsp; // some&nbsp; for ( const auto e : { MyEnum::a, MyEnum::b } )&nbsp; &nbsp; fun( e );&nbsp; // all&nbsp; std::for_each( std::begin( MyEnum::All ), std::end( MyEnum::All ), fun );&nbsp; return 0;}

红颜莎娜

如果你的枚举以0开头,则增量始终为1。enum&nbsp;enumType&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;=&nbsp;0, &nbsp;&nbsp;&nbsp;&nbsp;B, &nbsp;&nbsp;&nbsp;&nbsp;C, &nbsp;&nbsp;&nbsp;&nbsp;enumTypeEnd};for(int&nbsp;i=0;&nbsp;i<enumTypeEnd;&nbsp;i++){ &nbsp;&nbsp;&nbsp;enumType&nbsp;eCurrent&nbsp;=&nbsp;(enumType)&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}如果不是,我想唯一的原因就是创造类似的东西vector<enumType>&nbsp;vEnums;添加项目,并使用普通迭代器....
打开App,查看更多内容
随时随地看视频慕课网APP