Dela via


elements_view class (C++ Standard Library)

En vy över elementen vid ett markerat index i varje tuppeln-liknande värde i ett intervall. Om du till exempel får ett intervall med std::tuple<string, int>skapar du en vy som består av elementen string från varje tuppeln.

Syntax

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

Mallparametrar

N
Indexet för det element som ska väljas för vyn.

V
Typ av underliggande intervall. Den här typen måste uppfylla ranges::input_range.

Visa egenskaper

En beskrivning av följande poster finns i Visa klassegenskaper

Karakteristisk Beskrivning
Intervalladapter views::elements
Underliggande intervall Måste uppfylla input_range eller högre
Elementtyp Samma som typen av det indexerade tuppelns element
Visa iteratorkategori forward_range, bidirectional_range eller random_access_range
Storlek Endast om det underliggande intervallet uppfyller sized_range
Är const-iterable Endast om det underliggande intervallet uppfyller const-iterable
Gemensamt intervall Endast om det underliggande intervallet uppfyller common_range
Lånat intervall Endast om det underliggande intervallet uppfyller borrowed_range

Medlemmar

Medlemsfunktioner Beskrivning
KonstruktorerC++20 Konstruera en elements_view.
base C++20 Hämta det underliggande intervallet.
begin C++20 Hämta en iterator till det första elementet.
end C++20 Hämta sentinel i slutet av vyn.
size C++20 Hämta antalet element i den här vyn. Det underliggande intervallet måste uppfylla sized_range.
Ärvd från view_interface Beskrivning
back C++20 Hämta det sista elementet.
empty C++20 Testa om är elements_view tom.
front C++20 Hämta det första elementet.
operator[] C++20 Hämta elementet på den angivna positionen.
operator bool C++20 Testa om är elements_view inte tom.

Kravspecifikation

Rubrik:<ranges> (sedan C++20)

Namespace:std::ranges

Kompilatoralternativ:/std:c++20 eller senare krävs.

Anmärkningar

De tupppelliknande typer som du kan använda med elements_view är std::tuple, std::pairoch std::array.

Konstruktörer

Konstruera en instans av en elements_view.

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

Parameterar

base
Det underliggande intervallet.

Information om mallparametertypen finns i Mallparametrar.

Returvärde

En elements_view instans.

Anmärkningar

Det bästa sättet att skapa en elements_view är genom att använda elements intervalladaptern. Intervalladapter är det avsedda sättet att skapa visningsklasser. Vytyperna exponeras om du vill skapa en egen anpassad vytyp.

1) Skapa en elements_view från den angivna vyn.
2) Standardkonstruktionen är elements_view.

Exempel: 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

Hämtar en kopia av det underliggande intervallet.

// 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() &&;

Parameterar

Ingen.

Returvärde

Det underliggande intervallet.

begin

Hämta en iterator till det första elementet i elements_view.

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

Parameterar

Ingen.

Returvärde

En iterator som pekar på det första elementet i elements_view.

Bild av en vektor med elementen 10, 20 och 30. Det första elementet innehåller 10 och är märkt begin(). Det sista elementet innehåller 30 och är märkt med

end

Hämta sentinel i slutet av 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>;

Parameterar

Ingen.

Returvärde

Sentinel som följer det sista elementet i elements_view:

Bild av en vektor med elementen 10, 20 och 30. Det första elementet innehåller 10 och är märkt begin(). Det sista elementet innehåller 30 och är märkt med

size

Hämta antalet element i vyn.

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

Parameterar

Ingen.

Returvärde

Antalet element i elements_view.

Anmärkningar

Vyns storlek är endast tillgänglig om det underliggande intervallet är ett sized_range, eller med andra ord, avgränsat.

Se även

keys_view
values_view
Visa klasser
<ranges>