【问题标题】:for loop with enum in C++ [duplicate]C++中带有枚举的for循环[重复]
【发布时间】:2012-10-20 17:56:56
【问题描述】:

我在尝试为 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 循环?

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

【问题讨论】:

标签: c++ for-loop enums pascal


【解决方案1】:

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

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

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

【讨论】:

  • 但仅当枚举具有连续值时。
  • @TioPepe:谢谢!添加到答案中
  • 这在December 之前停止,这是不正确的。通常最后添加另一个枚举值 NumMonths 并使用它。
  • 是的枚举值是连续的
【解决方案2】:

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

  • 如果枚举的值加1(即具有连续值,默认情况下,如果你没有明确设置它们的值),你可以像平常一样使用它们ints,并增加循环变量每次加 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
    }
    

【讨论】:

  • 此解决方案的一个好处是范围的简洁性:for( E val : arr )。根据您的用例,您可能会受益于枚举的多个子集/排序:E oddValues[] = { THREE, FIVE }; for( E val : oddValues ) ...
猜你喜欢
  • 2015-12-13
  • 2012-07-04
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多