다음을 통해 공유


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

범위의 각 튜플과 유사한 값에서 선택한 인덱스에서 요소에 대한 뷰입니다. 예를 들어 범위 std::tuple<string, int>가 지정되면 각 튜플의 요소로 구성된 뷰를 string 만듭니다.

구문

template<input_range V, size_t N>
class elements_view : public view_interface<elements_view<V, N>>;

템플릿 매개 변수

N
뷰에 대해 선택할 요소의 인덱스입니다.

V
기본 범위의 형식입니다. 이 형식은 충족 ranges::input_range해야 합니다.

특성 보기

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

특성 설명
범위 어댑터 views::elements
기본 범위 만족 input_range 하거나 그 이상이어야 합니다.
요소 형식 인덱싱된 튜플 요소의 형식과 동일합니다.
반복기 범주 보기 forward_range, bidirectional_range 또는 random_access_range
크기 기본 범위가 충족되는 경우에만 sized_range
반복 const가능 기본 범위가 충족되는 경우에만 const-iterable
공통 범위 기본 범위가 충족되는 경우에만 common_range
빌린 범위 기본 범위가 충족되는 경우에만 borrowed_range

멤버

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

요구 사항

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

네임스페이스: std::ranges

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

설명

사용할 elements_view 수 있는 튜플과 유사한 형식은 std::tuple, std::pairstd::array.

생성자

의 인스턴스를 생성합니다 elements_view.

1) constexpr elements_view(V base);
2) elements_view() requires std::default_initializable<V> = default;

매개 변수

base
기본 범위입니다.

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

반환 값

elements_view 인스턴스입니다.

설명

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

1) 지정된 뷰에서 만듭니 elements_view 다.
2) 기본 구문 .elements_view

예: elements_view

// requires /std:c++20 or later
#include <array>
#include <iostream>
#include <map>
#include <ranges>
#include <vector>
#include <string>
#include <utility>

int main()
{
    // ========== work with a std::map

    std::map<std::string, int> cpp_standards
    {
        {"C++98", 1988},
        {"C++03", 2003},
        {"C++11", 2011},
        {"C++14", 2014},
        {"C++17", 2017},
        {"C++20", 2020}
    };

    // create an elements_view of all the string elements (<1>) from each tuple
    for (int const year : std::views::elements<1>(cpp_standards))
    {
        std::cout << year << ' '; // 2003 2011 2014 2017 1988 2020
    }

    std::cout << '\n';

    // Another way to call the range adaptor using pipe (|) syntax
    for (auto&& name : cpp_standards | std::views::elements<0>)
    {
        std::cout << name << ' '; // C++03 C++11 C++14 C++17 C++98 C++20
    }
    std::cout << '\n';

    // ========== working with arrays

    std::array<std::array<int, 4>, 3> arr = { {{0,1,2,3}, {4,5,6,7}, {8,9,10,11}} };
    for (int& fourth : arr | std::views::elements<3>)
    {
        std::cout << fourth << ' '; // 3 7 11
    }
    std::cout << '\n';

    // ========== work with a std::pair

    std::vector<std::pair<std::string, int>> windows
    {
        {"Windows 1.0", 1985},
        {"Windows 2.0", 1987},
        {"Windows 3.0", 1990},
        {"Windows 3.1", 1992},
        {"Windows NT 3.1", 1993},
        {"Windows 95", 1995},
        {"Windows NT 4.0", 1996},
        {"Windows 98", 1998},
        {"Windows 2000", 2000}
    };

    for (int year : std::views::elements<1>(windows))
    {
        std::cout << year << ' '; // 1985 1987 1990 1992 1993 1995 1996 1998 2000
    }
}
2003 2011 2014 2017 1988 2020
C++03 C++11 C++14 C++17 C++98 c++20
3 7 11
1985 1987 1990 1992 1993 1995 1996 1998 2000

base

기본 범위의 복사본을 가져옵니다.

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

// Uses a move constructor to return the underlying range
constexpr V base() &&;

매개 변수

없음.

반환 값

기본 범위입니다.

begin

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

1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires range<const V>;

매개 변수

없음.

반환 값

의 첫 번째 요소를 elements_view가리키는 반복기입니다.

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

end

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

1) constexpr auto end() requires (!Simple_view<V> && !ranges::common_range<V>);
2) constexpr auto end() requires (!Simple_view<V> && ranges::common_range<V>);
3) constexpr auto end() const requires ranges::range<const V>;
4) constexpr auto end() const requires ranges::common_range<const V>;

매개 변수

없음.

반환 값

다음의 마지막 요소 뒤에 있는 sentinel입니다 elements_view.

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

size

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

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

매개 변수

없음.

반환 값

elements_view의 요소 수입니다.

설명

보기의 크기는 기본 범위 sized_range가 경계인 경우에만 사용할 수 있습니다.

참고 항목

keys_view
values_view
클래스 보기
<ranges>