2

C++ で for each ループを作成しようとすると問題が発生します。私はまだそれを作ることを知らないのであれば、これがC ++で可能かどうかはわかりません。

パスカルで書かれた簡単な問題が 1 つあります。これは、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
...

列挙に対して for each ループを実行する同様の方法は、Python でも可能です。私の質問は:

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++ で直接これを行うことはできません。ただし、いくつかの回避策があります。

  • 列挙型の値が 1 増加する場合 (つまり、値を明示的に設定しない場合に備えて、デフォルトで連続する値を持つ場合)、それらを通常intの s として使用し、サイクル変数をそれぞれ 1 ずつ増加させることができます。 last の値と等しくなるまでの時間enum。これは、この 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 に答える