2013-07-22 4 views
5

으로 반복

enum Animal {Cat, Dog, Dolphin} 

처럼 연속 열거를 반복하는 방법에는 여러 가지가 있습니다 그러나

enum Animal {Cat = 0, Dog = 5, Dolphin = 8} 
같은 비 연속적인 열거 요소를 반복 할 수있는 편리하고 쉬운 방법이를 통해
+0

'enum'에 직접 없습니다. 그러나 컨테이너 ('vector','set','unordered_set', 뭐든간에 ...) 안에 수동으로'enum'의 모든 요소를 ​​넣고 그 컨테이너를 반복 할 수 있습니다. – syam

+0

당신은'for (Animal a = Cat; a! = Dolphin; a ++)와 같은 것을 원한다는 뜻입니까? 이 기능은 첫 번째 열거 형에서 작동하지만 읽기와 이해가 어려울 수 있으므로 개인적으로 권장할만한 것이 아닙니다. –

+2

이 스레드에서 답변을 찾을 수 있습니다 http : // stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum. – blitz

답변

2

짧은 대답은 "아니오"입니다.

animals 테이블을 만든 다음 animals에 범위 루프를 사용할 수 있습니다.

여기 완전한 "데모"입니다 :

#include <iostream> 

using namespace std; 

enum Animal {Cat = 0, Dog = 5, Dolphin = 8}; 

int main() 
{ 
    Animal animals[] = { Cat, Dog, Dolphin }; 

    for(Animal a : animals) cout << a << endl; 
} 

출력은 다음과 같습니다

0 
5 
8 
0

내가 질문도 의미가 있는지 모르겠어요. 기본적으로 모든 요금에 있습니다. 고려 :

enum Animal 
{ 
    cat = 0, 
    dog = 5, 
    dolphin = 8, 
    canine = 5, 
    bear = 20 
}; 

기본 값이 5 경우, 당신은이 dog 설정되었는지 여부를 또는 canine에 의해 결정의 방법, 그래서 다음 값이 dolphin 또는 bear 수 있는지 여부 알고 방법이 없습니다. 배열에 값을 넣고 반복 할 수 있지만 다른 해결책이 표시되지 않습니다.

는 일반적으로, 물론, 대부분의 시간이 다음과 같이 명시 적으로 에 영향을 미치는 값이야, 당신은 비트 마스크 (std::ios_base::fmtflags 같은 예 )을 정의하고 있으며, 그 경우에, 그것은 반복 할 이해되지 않는다 .이 과 같은 특수한 sentinal 값 (예 : unset과 같음)으로 생각할 수있는 다른 사용 사례는 반복 될 때 건너 뛰기를 원하거나 동의어 (내 dog/canine 위의 예와 같이) 일 수 있습니다. d를 아마 만 동의어 중 하나를 방문하려면, 현실적으로, 당신은 같은 쓰기 뭔가 거라고 :

enum Animal 
{ 
    cat, 
    dog, 
    canine = dog, 
    dolphin, 
    bear 
}; 

, 그리고 일반적인 반복 트릭 당신이 원하는 정확히 될 것입니다. 후위 ++, < 당신이 필요로하는 무엇을위한

enum Animal 
{ 
    Cat = 0 
    , Dog = 5 
    , Dolphin = 8 
}; 

inline Animal& operator++ (Animal &x) 
{ 
    switch (x) { 
    case Cat: 
     x = Dog; 
     break; 
    case Dog: 
     x = Dolphin; 
     break; 
    case Dolphin: 
    default: 
     x = static_cast<Animal>(static_cast<int>(x) + 1); 
     break; 
    } 
    return x; 
} 

DTTO :

1

는 또한 열거에 필요한 연산자 (들)을 제공 할 수있다. 물론 열거 형의 정의와 동기화해야합니다. 별로 간단하지 않지만 옵션입니다.