for C循环使用枚举

时间:2012-10-31 09:49:12

标签: c++ for-loop enums pascal

我在尝试为C ++中的每个循环制作时遇到问题。我不确定这是否可以在C ++中实现,如果我仍然不知道这样做。

我有一个简单的问题用帕斯卡写的,它确实找到了当天的星期五13或星期六25没有遇到的那一天。

在pascal我有这样的代码:

{First I declare types}
type
    months = (January, February, March, April, May, June, July, August, September, October, November, December);
...
{Then I declare variable for months}
var
    m: mesec;
...
{Then I can declare for loop that will loop over months}
for m:= januar to december do
...

在python中也可以为枚举的每个循环执行类似的方法。 我的问题是:

对于C ++中的枚举,是否有任何方法可以执行或甚至循环?

我知道这可能看起来像是一个乞讨者问题,但我尝试了几种不同的方法来做它不起作用。不编译。

2 个答案:

答案 0 :(得分:5)

如果枚举值是连续的

,您可以在c ++中执行以下操作
enum Months
  {
  January,
  February,
  // etc...
  December,
  Last
  };

for (int month = January; month != Last; ++month)
  {
  // do stuff
  }

答案 1 :(得分:2)

不,你不能直接在C ++中这样做。但是,有一些解决方法。

  • 如果枚举值增加1(即具有连续值,如默认情况下那样,如果您没有明确设置它们的值),则可以将它们用作普通int s,并将循环变量每次增加1,直到它等于最后enum的值。这在this SO question
  • 中有所描述
  • 如果值增加1(例如enum E {FIRST = 5, SECOND = 10},则会变得更加棘手。您可以创建一个包含所有可能值的数组并使用它(这是一个糟糕的解决方案,但它的工作原理):

    enum E
    {
        FIVE = 5,
        TEN = 10,
        THREE = 3
    };
    E arr[3] = {FIVE,TEN,THREE};
    E iterator;
    for( int i = 0; i < 3; i++ )
    {
        iterator = arr[i];
        //do something with it
    }