elements_view
Klasse (C++-Standardbibliothek)
Eine Ansicht über den Elementen an einem ausgewählten Index in jedem Tupel-ähnlichen Wert in einem Bereich. Erstellen Sie beispielsweise in einem Bereich std::tuple<string, int>
von , eine Ansicht, die aus den string
Elementen aus jedem Tupel besteht.
Syntax
template<input_range V, size_t N>
class elements_view : public view_interface<elements_view<V, N>>;
Vorlagenparameter
N
Der Index des Elements, das für die Ansicht ausgewählt werden soll.
V
Der Typ des zugrunde liegenden Bereichs. Dieser Typ muss erfüllen ranges::input_range
.
Eigenschaften der Ansicht
Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen
Merkmal | Beschreibung |
---|---|
Range Adaptor | views::elements |
Zugrunde liegender Bereich | Muss erfüllen input_range oder höher |
Elementtyp | Identisch mit dem Typ des indizierten Tupelelements |
Iteratorkategorie anzeigen | forward_range , bidirectional_range oder random_access_range |
Größer eingestellt | Nur, wenn der zugrunde liegende Bereich erfüllt ist sized_range |
Ist const -iterierbar |
Nur, wenn der zugrunde liegende Bereich erfüllt ist const-iterable |
Allgemeiner Bereich | Nur, wenn der zugrunde liegende Bereich erfüllt ist common_range |
Geliehener Bereich | Nur, wenn der zugrunde liegende Bereich erfüllt ist borrowed_range |
Member
Memberfunktionen | Beschreibung |
---|---|
Konstruktoren C++20 | Erstellen Sie ein elements_view . |
base C++20 |
Rufen Sie den zugrunde liegenden Bereich ab. |
begin C++20 |
Rufen Sie einen Iterator zum ersten Element ab. |
end C++20 |
Rufen Sie den Sentinel am Ende der Ansicht ab. |
size C++20 |
Rufen Sie die Anzahl der Elemente in dieser Ansicht ab. Der zugrunde liegende Bereich muss erfüllt sein sized_range . |
Geerbt von view_interface |
Beschreibung |
back C++20 |
Rufen Sie das letzte Element ab. |
empty C++20 |
Testen Sie, ob die Datei elements_view leer ist. |
front C++20 |
Rufen Sie das erste Element ab. |
operator[] C++20 |
Rufen Sie das Element an der angegebenen Position ab. |
operator bool C++20 |
Testen Sie, ob die elements_view Datei nicht leer ist. |
Anforderungen
Header: <ranges>
(seit C++20)
Namespace:std::ranges
Compileroption: /std:c++20
oder höher ist erforderlich.
Hinweise
Die tupelähnlichen Typen, mit elements_view
denen Sie arbeiten können, sind std::tuple
, std::pair
und std::array
.
Konstruktoren
Erstellen einer Instanz eines elements_view
.
1) constexpr elements_view(V base);
2) elements_view() requires std::default_initializable<V> = default;
Parameter
base
Der zugrunde liegende Bereich.
Informationen zum Vorlagenparametertyp finden Sie unter Vorlagenparameter.
Rückgabewert
Eine elements_view
-Instanz.
Hinweise
Die beste Methode zum Erstellen eines Elements elements_view
ist die Verwendung des elements
Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.
1) Erstellen Sie eine elements_view
aus der angegebenen Ansicht.
2) Standardkonstrukt eines elements_view
.
Beispiel: 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
Ruft eine Kopie des zugrunde liegenden Bereichs ab.
// 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() &&;
Parameter
Keine
Rückgabewert
Der zugrunde liegende Bereich.
begin
Rufen Sie einen Iterator zum ersten Element in der elements_view
.
1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires range<const V>;
Parameter
Keine
Rückgabewert
Ein Iterator, der auf das erste Element in der elements_view
.
end
Abrufen des Sentinels am Ende des 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>;
Parameter
Keine
Rückgabewert
Der Sentinel, der auf das letzte Element in der elements_view
:
size
Ruft die Anzahl der Elemente in der Ansicht ab.
constexpr auto size() requires sized_range<V>;
constexpr auto size() const requires sized_range<const V>;
Parameter
Keine
Rückgabewert
Die Anzahl der Elemente im elements_view
.
Hinweise
Die Größe der Ansicht ist nur verfügbar, wenn der zugrunde liegende Bereich ein sized_range
oder mit anderen Worten begrenzt ist.