다음을 통해 공유


transform_view 클래스(C++ 표준 라이브러리)

각 요소 뷰는 지정된 범위에 있는 요소의 변환입니다.

구문

template<input_range V, move_constructible F>
    requires view<V> && is_object_v<F> &&
    regular_invocable<F&, range_reference_t<V>> &&
    can-reference<invoke_result_t<F&, range_reference_t<V>>>
class transform_view : public view_interface<transform_view<V, F>>;

템플릿 매개 변수

F
요소를 변환하는 함수 개체의 형식입니다.

V
기본 뷰의 형식입니다.

특성 보기

다음 항목에 대한 설명은 클래스 특성 보기를 참조 하세요.

특성 설명
범위 어댑터 views::transform
기본 범위 만족 input_range 하거나 그 이상이어야 합니다.
요소 형식 변환 함수의 반환 형식과 동일합니다.
반복기 범주 보기 input_range 기본 범위에 따라 최대 random_access_range지원
크기 기본 범위가 충족되는 경우에만 sized_range
반복 const가능 기본 범위가 반복 가능하고 변환이 const 참조에서 const 작동하는 경우에만 해당됩니다.
공통 범위 기본 범위가 충족되는 경우에만 common_range
빌린 범위 아니요

멤버

멤버 함수 설명
생성자C++20 뷰를 생성합니다.
baseC++20 기본 범위를 가져옵니다.
beginC++20 첫 번째 요소에 대한 반복기를 가져옵니다.
endC++20 보기의 끝에 있는 sentinel을 가져옵니다.
sizeC++20 요소 수를 가져옵니다. 기본 범위는 충족 sized_range해야 합니다.
에서 상속됨 view_interface 설명
backC++20 마지막 요소를 가져옵니다.
emptyC++20 보기가 비어 있는지 테스트합니다.
frontC++20 첫 번째 요소를 가져옵니다.
operator boolC++20 보기가 비어 있지 않은지 테스트합니다.
operator[]C++20 지정된 위치에 있는 요소를 가져옵니다.

요구 사항

헤더: <ranges> (C++20 이후)

네임스페이스: std::ranges

컴파일러 옵션: /std:c++20 이상이 필요합니다.

생성자

의 인스턴스 생성 transform_view

1) transform_view() requires default_initializable<V>
         && default_initializable<F> = default;
2) constexpr transform_view(V base, F func);

매개 변수

base
기본 보기입니다.

func
각 요소를 변환하는 함수입니다.

템플릿 매개 변수 형식에 대한 자세한 내용은 템플릿 매개 변수를 참조 하세요.

반환 값

transform_view 인스턴스입니다.

설명

범위를 만드는 transform_view 가장 좋은 방법은 범위 어댑터를 사용하는 views::transform 것입니다. 범위 어댑터는 뷰 클래스를 만드는 데 사용되는 방법입니다. 사용자 고유의 사용자 지정 보기 형식을 만들려는 경우 보기 형식이 노출됩니다.

1) 초기화된 transform_view값을 만듭니다. 변환 함수와 기본 뷰는 기본 초기화 가능해야 합니다.
2) 뷰 및 변환 함수func에서 base 구문을 transform_view 이동합니다. 둘 다 basefunc 통해 std::move()이동됩니다.

예: transform_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
#include <chrono>

using namespace std;
using namespace chrono;

void print(auto v)
{
    for (auto x : v)
    {
        cout << x << ' ';
    }
    cout << '\n';
}

struct classes
{
    string className;
    weekday startDay;
};

int main()
{
    std::vector<int> v{0, 1, 2, 3, -4, 5, 6};

    // outputs 0 2 4 6 -8 10 12
    print(v | std::views::transform([](int i) {return i * 2; }));

    // ---- Modify the elements in the collection by returning a reference to the element to transform

    std::vector<classes> theClasses = {
        {"Math", Monday},
        {"English", Wednesday},
        {"History", Monday},
        {"Science", Wednesday},
        {"Art", Friday},
        {"Music", Thursday}
    };

    // lambda to get a reference to the day of the week for a class
    auto getDay = [](classes& c) -> weekday&
    {
        return c.startDay;
    };

    // If a class starts on Monday, change it to Tuesday
    for (auto&& startDay : theClasses | std::views::transform(getDay))
    {
        // modify the startDay in the collection
        if (startDay == Monday)
        {
            startDay = Tuesday;
        }
    }

    // output classes and start times
    for (auto c : theClasses)
    {
        std::cout << c.className << " : " << c.startDay << '\n';
    }
}
0 2 4 6 -8 10 12
Math : Tue
English : Wed
History : Tue
Science : Wed
Art : Fri
Music : Thu

base

기본 보기를 가져옵니다.

// Uses a copy constructor to return the underlying view
constexpr V base() const& requires std::copy_constructible<V>;

// Uses std::move() to return the underlying view
constexpr V base() &&;

매개 변수

없음

반품

기본 보기입니다.

begin

뷰의 첫 번째 요소에 대한 반복기를 가져옵니다.

constexpr auto begin();

반환 값

뷰의 첫 번째 요소를 가리키는 반복기입니다. 뷰에 조건자가 없는 경우 동작이 정의되지 않습니다.

요소가 10, 20 및 30인 벡터 그림입니다. 첫 번째 요소는 10을 포함하며 begin()이라는 레이블이 지정됩니다. 마지막 요소는 30을 포함하며 '마지막 요소'라는 레이블이 지정됩니다. 마지막 요소 뒤의 허수 상자는 sentinel을 나타내며 end()라는 레이블이 지정됩니다.

end

보기의 끝에 있는 sentinel을 가져옵니다.

constexpr auto end()

반환 값

뷰의 마지막 요소를 따르는 sentinel입니다.

요소가 10, 20 및 30인 벡터 그림입니다. 첫 번째 요소는 10을 포함하며 begin()이라는 레이블이 지정됩니다. 마지막 요소는 30을 포함하며 '마지막 요소'라는 레이블이 지정됩니다. 마지막 요소 뒤의 허수 상자는 sentinel을 나타내며 end()라는 레이블이 지정됩니다.

size

보기의 요소 수를 가져옵니다.

constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;

매개 변수

없음.

반환 값

보기의 요소 수입니다.

참고 항목

<ranges>
filter 범위 어댑터
클래스 보기