Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membalikkan Bagi Gelung Berasaskan Julat dalam C Menggunakan Boost.Range?

Bagaimanakah Saya Boleh Membalikkan Bagi Gelung Berasaskan Julat dalam C Menggunakan Boost.Range?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-08 18:11:15680semak imbas

How Can I Reverse a Range-Based For-Loop in C   Using Boost.Range?

Untuk Gelung Berasaskan Julat Songsang dalam C 11 dengan Boost.Julat

Dalam C , untuk gelung berasaskan julat ialah alat berkuasa untuk mengulangi bekas. Walau bagaimanapun, secara lalai, ia berulang dari awal bekas hingga akhir. Adakah terdapat cara untuk menterbalikkan arah ini?

Iterators Songsang dengan Range-Based For-Loop

Satu cara untuk melelaran ke atas bekas secara terbalik ialah menggunakan rbegin() dan rend() fungsi ahli. Walau bagaimanapun, ini memerlukan penggunaan iterator eksplisit dan boleh menjadi sukar digunakan untuk senario yang kompleks:

for (auto i = c.rbegin(); i != c.rend(); ++i) { ... }

Penyesuai Songsang Boost.Range

Nasib baik, Boost.Range menyediakan penyelesaian elegan dengan rangsangan::penyesuai::penyesuai terbalik. Penyesuai ini membungkus bekas dan membalikkan arah lelarannya. Ini membolehkan penyepaduan yang lancar dengan gelung berasaskan julat:

for (auto& i : boost::adaptors::reverse(c)) { ... }

Contoh Penggunaan

Berikut ialah contoh penggunaan boost::adaptors::reverse to iterate atas senarai secara terbalik pesanan:

#include <list>
#include <iostream>
#include <boost/range/adaptor/reversed.hpp>

int main() {
    std::list<int> x{2, 3, 5, 7, 11, 13, 17, 19};
    for (auto i : boost::adaptors::reverse(x)) {
        std::cout << i << '\n';
    }
    for (auto i : x) {
        std::cout << i << '\n';
    }
    return 0;
}

Output:

19
17
13
11
7
5
3
2
2
3
5
7
11
13
17
19

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membalikkan Bagi Gelung Berasaskan Julat dalam C Menggunakan Boost.Range?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn