Příkaz For založený na rozsahu (C++)

Vykoná příkaz statement opakovaně a sekvenčně pro každý prvek výrazu expression.

Syntaxe

for (výraz pro deklaraci:rozsahu)
Prohlášení

Poznámky

Příkaz založený na for rozsahu slouží k vytvoření smyček, které se musí provést prostřednictvím oblasti, která je definována jako cokoli, čím můžete iterovat – std::vectornapříklad , nebo jakoukoli jinou sekvenci standardní knihovny jazyka C++, jejíž rozsah je definován pomocí operátoru begin() a a end(). Název deklarovaný v for-range-declaration části je místní pro for příkaz a nelze ho znovu deklarovat nebo expressionstatement. Všimněte si, že auto klíčové slovo je upřednostňované v for-range-declaration části příkazu.

Novinka v sadě Visual Studio 2017: Smyčky založené na for rozsahu už nevyžadují a end()begin() vracejí objekty stejného typu. To umožňuje end() vrátit objekt sentinelu, jako je použití rozsahů definovaných v návrhu Rozsahy-V3. Další informace najdete v tématu Generalizace smyčky založené For na rozsahu a knihovny range-v3 na GitHubu.

Tento kód ukazuje, jak pomocí smyčky založené na for rozsahu iterovat polem a vektorem:

// range-based-for.cpp
// compile by using: cl /EHsc /nologo /W4
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    // Basic 10-element integer array.
    int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    // Range-based for loop to iterate through the array.
    for( int y : x ) { // Access by value using a copy declared as a specific type.
                       // Not preferred.
        cout << y << " ";
    }
    cout << endl;

    // The auto keyword causes type inference to be used. Preferred.

    for( auto y : x ) { // Copy of 'x', almost always undesirable
        cout << y << " ";
    }
    cout << endl;

    for( auto &y : x ) { // Type inference by reference.
        // Observes and/or modifies in-place. Preferred when modify is needed.
        cout << y << " ";
    }
    cout << endl;

    for( const auto &y : x ) { // Type inference by const reference.
        // Observes in-place. Preferred when no modify is needed.
        cout << y << " ";
    }
    cout << endl;
    cout << "end of integer array test" << endl;
    cout << endl;

    // Create a vector object that contains 10 elements.
    vector<double> v;
    for (int i = 0; i < 10; ++i) {
        v.push_back(i + 0.14159);
    }

    // Range-based for loop to iterate through the vector, observing in-place.
    for( const auto &j : v ) {
        cout << j << " ";
    }
    cout << endl;
    cout << "end of vector test" << endl;
}

Tady je výstup:

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
end of integer array test

0.14159 1.14159 2.14159 3.14159 4.14159 5.14159 6.14159 7.14159 8.14159 9.14159
end of vector test

Smyčka založená na for rozsahu se ukončí, když se spustí některý z těchto příkazů statement : a break, returnnebo goto na příkaz označený mimo smyčku založenou na for rozsahu. Příkaz continue ve smyčce založené na for rozsahu ukončí pouze aktuální iteraci.

Mějte na paměti tyto skutečnosti týkající se rozsahu for:

  • Automaticky rozpozná pole.

  • Rozpozná kontejnery, které mají .begin() a .end().

  • Pro vše ostatní používá vyhledávání závislé na argumentu begin() a end().

Viz také

auto
Příkazy iterace
Klíčová slova
while Příkaz (C++)
do-while Příkaz (C++)
for Příkaz (C++)