enum Animal {Cat, Dog, Dolphin}
처럼 연속 열거를 반복하는 방법에는 여러 가지가 있습니다 그러나
enum Animal {Cat = 0, Dog = 5, Dolphin = 8}
같은 비 연속적인 열거 요소를 반복 할 수있는 편리하고 쉬운 방법이를 통해
enum Animal {Cat, Dog, Dolphin}
처럼 연속 열거를 반복하는 방법에는 여러 가지가 있습니다 그러나
enum Animal {Cat = 0, Dog = 5, Dolphin = 8}
같은 비 연속적인 열거 요소를 반복 할 수있는 편리하고 쉬운 방법이를 통해
짧은 대답은 "아니오"입니다.
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
내가 질문도 의미가 있는지 모르겠어요. 기본적으로 모든 요금에 있습니다. 고려 :
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 :
는 또한 열거에 필요한 연산자 (들)을 제공 할 수있다. 물론 열거 형의 정의와 동기화해야합니다. 별로 간단하지 않지만 옵션입니다.
'enum'에 직접 없습니다. 그러나 컨테이너 ('vector','set','unordered_set', 뭐든간에 ...) 안에 수동으로'enum'의 모든 요소를 넣고 그 컨테이너를 반복 할 수 있습니다. – syam
당신은'for (Animal a = Cat; a! = Dolphin; a ++)와 같은 것을 원한다는 뜻입니까? 이 기능은 첫 번째 열거 형에서 작동하지만 읽기와 이해가 어려울 수 있으므로 개인적으로 권장할만한 것이 아닙니다. –
이 스레드에서 답변을 찾을 수 있습니다 http : // stackoverflow.com/questions/261963/how-can-i-iterate-over-an-enum. – blitz