>백엔드 개발 >C++ >Boost.Range를 사용하여 C에서 범위 기반 For 루프를 어떻게 되돌릴 수 있습니까?

Boost.Range를 사용하여 C에서 범위 기반 For 루프를 어떻게 되돌릴 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-08 18:11:15680검색

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

Boost.Range를 사용하는 C 11의 역방향 범위 기반 For 루프

C에서 범위 기반 for 루프는 컨테이너 반복을 위한 강력한 도구입니다. 그러나 기본적으로 컨테이너의 시작부터 끝까지 반복됩니다. 이 방향을 반대로 하는 방법이 있나요?

범위 기반 For 루프를 사용한 역방향 반복기

컨테이너를 역방향으로 반복하는 한 가지 방법은 rbegin() 및 rend() 멤버 함수. 그러나 이를 위해서는 명시적인 반복자를 사용해야 하며 복잡한 시나리오에서는 다루기 어려울 수 있습니다.

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

Boost.Range의 역방향 어댑터

다행히도 Boost.Range는 Boost::adaptors::reverse 어댑터를 사용한 우아한 솔루션입니다. 이 어댑터는 컨테이너를 래핑하고 반복자의 방향을 바꿉니다. 이를 통해 범위 기반 for 루프와 원활하게 통합할 수 있습니다.

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

사용 예

다음은 Boost::adaptors::reverse를 사용하여 반복하는 예입니다. 목록을 거꾸로 뒤집는다 주문:

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

출력:

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

위 내용은 Boost.Range를 사용하여 C에서 범위 기반 For 루프를 어떻게 되돌릴 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.