2

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

我有一个用帕斯卡写的简单问题,当它是星期五 13 或星期六 25 时,它确实找到了一年中的哪一天,无论哪一天。

在帕斯卡我有这样的代码:

{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 中也可以使用类似的方式对枚举进行 for each 循环。我的问题是:

有没有办法在 C++ 中对枚举进行 for 甚至 while 循环?

我知道这似乎是一个初学者的问题,但我尝试了几种不同的方法来做到这一点不起作用。不编译。

4

2 回答 2

5

如果枚举值是连续的,您可以在 C++ 中执行以下操作

enum Months
  {
  January,
  February,
  // etc...
  December,
  Last
  };

for (int month = January; month != Last; ++month)
  {
  // do stuff
  }
于 2012-10-31T09:56:26.277 回答
3

不,您不能直接在 C++ 中执行此操作。不过,有一些解决方法。

  • 如果 enum 的值增加 1(即具有连续值,默认情况下,如果您没有明确设置它们的值),您可以将它们用作普通ints,并将循环变量每个增加 1时间,直到它等于 lastenum的值。这在这个 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
    }
    
于 2012-10-31T09:58:12.867 回答