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::vector
napří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 expression
statement
. 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
, return
nebo 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()
aend()
.
Viz také
auto
Příkazy iterace
Klíčová slova
while
Příkaz (C++)
do-while
Příkaz (C++)
for
Příkaz (C++)
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro