2016-12-14 9 views
0

私は奇妙に見えたfor C++のループ構文。以下のプログラムをご覧ください。C++でforループを使用する正しい方法ですか?

#include <iostream> 
using namespace std; 

int main() 
{ 
    int num, count = 0; 
    int array[]= {1,1,2,3,4,1,3,2,9,8,7}; 
    cout<<"Which number would you like to know about how many times it appeared?"<<endl; 
    cin>>num; 

    for (int i:array) 
    { 
     if (i == num) 
      ++count; 
    } 

    cout<<"Number "<<num<<" appeared "<<count<<" times in the array"<<endl; 
    return 0; 
} 

それは成功しGCCのLinuxプラットフォーム上で実行されます。

参照リンクHere

私の質問は、です。これはC++のループで使用する正しい方法ですか?

また、for (int i:array)for (int i:array ; ;)に相当しますか?

私の貧しい私の英語のために申し訳ありません。前もって感謝します。

+3

http://en.cppreference.com/w/cpp/language/range-for –

+0

の構文は 'for(int i = 0; i

+2

@nick_n_aこれは 'for'ループを書く一つの方法ですが、それだけではありません。例の1つはC++ 11の範囲ベースです(すでにリンクされています) – UnholySheep

答えて

4

が存在することになりますの異なる構文(C++ 11以降)forループ、古いCスタイルのために:

for (initialization; test; increment) 

と新しいで新しい

for (declaration: container) 

構文の場合、declarationは、コンテナの各要素の値が連続して与えられる変数を宣言します。 「宣言」の一般的な値は、コンテナ内の値への参照の有無、コピーの値の保持の有無に応じて、auto val,const auto val,auto& valconst auto& valです。

両方の構文が正しい。むしろ、あなたがループ内でやりたいことに依存します。私の好みは、ループカウンターやイテレーターが必要な場合を除いて、範囲を使用することです。その場合、私は古いスタイルに戻ってしまいます。

仕様の詳細については、http://en.cppreference.com/w/cpp/language/range-forを参照してください(コンテナの意味)。

1

構文for (int i:array)は、ループの各繰り返しで自動的にインクリメントするカウンタを作成するfor (int i = 0; i<sizeof(array); i++)と比較して、配列の各要素を反復処理します。カウンタを使用して配列の要素にアクセスできます。array[i]

どちらを使用するかは、実行する操作によって異なります。あなたの例では、ループの反復を追跡する必要はありませんので、前者は正常に動作します。たとえば、繰り返し回数を毎回印刷したい場合は、後者を使用します。

P.S.あなたの英語は完璧です:)

+0

私は「完璧」とは言いません - 私はOPがネイティブスピーカーではないと確信できますが、それは私のドイツ語よりも優れていて、私はドイツ語が作業言語だった会社で働いています。 –

+2

完璧ではありませんが、多くのネイティブ英語の人より読むのが簡単です! OPが描くように「貧しい」よりもはるかに優れています。 – ryansin

+0

@Sinfieldd、Martin Bonner - ありがとうございます。 –

関連する問題