Bagikan melalui


Berbasis rentang untuk Pernyataan (C++)

statement Mengeksekusi berulang kali dan berurutan untuk setiap elemen di expression.

Sintaks

for (ekspresi deklarasi:untuk rentang)
statement

Keterangan

Gunakan pernyataan berbasis for rentang untuk membuat perulangan yang harus dijalankan melalui rentang, yang didefinisikan sebagai apa pun yang dapat Anda ulang—misalnya, std::vector, atau urutan Pustaka Standar C++ lainnya yang rentangnya didefinisikan oleh begin() dan end(). Nama yang dideklarasikan dalam for-range-declaration bagian bersifat lokal untuk for pernyataan dan tidak dapat dideklarasikan ulang di expression atau statement. Perhatikan bahwa auto kata kunci lebih disukai dalam for-range-declaration bagian pernyataan.

Baru di Visual Studio 2017: Perulangan berbasis for rentang tidak lagi memerlukan dan begin()end() mengembalikan objek dengan jenis yang sama. Ini memungkinkan end() untuk mengembalikan objek sentinel seperti yang digunakan oleh rentang seperti yang ditentukan dalam proposal Rentang-V3. Untuk informasi selengkapnya, lihat Menggeneralisasi Perulangan Berbasis For Rentang dan pustaka rentang-v3 di GitHub.

Kode ini menunjukkan cara menggunakan perulangan berbasis for rentang untuk melakukan iterasi melalui array dan vektor:

// 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;
}

Berikut adalah outputnya:

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

Perulangan berbasis for rentang berakhir ketika salah satu di ini dijalankan statement : break, , returnatau goto ke pernyataan berlabel di luar perulangan berbasis for rentang. Pernyataan continue dalam perulangan berbasis for rentang hanya mengakhiri iterasi saat ini.

Perlu diingat fakta-fakta ini tentang berbasis forrentang :

  • Secara otomatis mengenali array.

  • Mengenali kontainer yang memiliki .begin() dan .end().

  • Menggunakan pencarian begin() tergantung argumen dan end() untuk hal lain.

Baca juga

auto
Pernyataan Perulangan
Kata kunci
while Pernyataan (C++)
do-while Pernyataan (C++)
for Pernyataan (C++)