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 | 뷰를 생성합니다. |
base C++20 |
기본 범위를 가져옵니다. |
begin C++20 |
첫 번째 요소에 대한 반복기를 가져옵니다. |
end C++20 |
보기의 끝에 있는 sentinel을 가져옵니다. |
size C++20 |
요소 수를 가져옵니다. 기본 범위는 충족 sized_range 해야 합니다. |
에서 상속됨 view_interface |
설명 |
back C++20 |
마지막 요소를 가져옵니다. |
empty C++20 |
보기가 비어 있는지 테스트합니다. |
front C++20 |
첫 번째 요소를 가져옵니다. |
operator bool C++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
이동합니다. 둘 다 base
을 func
통해 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();
반환 값
뷰의 첫 번째 요소를 가리키는 반복기입니다. 뷰에 조건자가 없는 경우 동작이 정의되지 않습니다.
end
보기의 끝에 있는 sentinel을 가져옵니다.
constexpr auto end()
반환 값
뷰의 마지막 요소를 따르는 sentinel입니다.
size
보기의 요소 수를 가져옵니다.
constexpr auto size() requires ranges::sized_range<V>;
constexpr auto size() const requires ranges::sized_range<const V>;
매개 변수
없음.
반환 값
보기의 요소 수입니다.