для цикла с перечислением в переполнении стека

У меня есть проблема, пытаясь сделать для каждого цикла в 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.
Мой вопрос:

Есть ли способ сделать для или даже во время цикла по перечислениям в C ++?

Я знаю, что это может показаться вопросом для начинающих, но я попробовал несколько разных способов сделать это не работает. Не компилируется.

2

Решение

Нет, вы не можете сделать это напрямую в C ++. Однако есть несколько обходных путей.

  • Если значения перечисления увеличиваются на 1 (т.е. имеют последовательные значения, как они делают по умолчанию, если вы явно не устанавливаете их значения), вы можете использовать их как обычно ints, и увеличивайте переменную цикла на 1 каждый раз, пока она не станет равной последней enumценность. Это описано в этот ТАК вопрос.
  • Если значения не увеличивается на 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
    }
    
2

Другие решения

Вы можете сделать следующее в c ++ при условии, что значения перечисления являются последовательными

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

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

По вопросам рекламы [email protected]