std::ranges:: views:: join, std::ranges:: join_view
|
Definiert im Header
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
und
|
(1) | (seit C++20) |
|
namespace
views
{
inline
constexpr
/* nicht spezifiziert */
join
=
/* nicht spezifiziert */
;
|
(2) | (seit C++20) |
|
Aufrufsignatur
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* siehe unten */
|
(seit C++20) | |
view
darstellt, die aus der durch Flachlegen einer Ansicht von Bereichen erhaltenen Sequenz besteht.
join_view
modelliert
input_range
.
join_view
modelliert
forward_range
wenn:
- ranges:: range_reference_t < V > ist ein Referenztyp, und
-
V
und
ranges::
range_reference_t
<
V
>
modellieren jeweils
forward_range.
join_view
modelliert
bidirectional_range
wenn:
- ranges:: range_reference_t < V > ist ein Referenztyp,
-
V
modelliert
bidirectional_range, und -
ranges::
range_reference_t
<
V
>
modelliert sowohl
bidirectional_rangeals auchcommon_range.
join_view
modelliert
common_range
wenn:
- ranges:: range_reference_t < V > ist ein Referenztyp, und
-
V
und
ranges::
range_reference_t
<
V
>
modellieren jeweils
forward_rangeundcommon_range.
Inhaltsverzeichnis |
Memberfunktionen
konstruiert einen
join_view
(öffentliche Elementfunktion) |
|
|
gibt eine Kopie der zugrunde liegenden (angepassten) Ansicht zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator oder einen Sentinel zum Ende zurück
(öffentliche Elementfunktion) |
|
Geerbt von std::ranges::view_interface |
|
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur wenn sie
sized_range
oder
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
(C++23)
|
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur wenn
ranges::empty
darauf anwendbar ist
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
bidirectional_range
und
common_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Ableitungsleitfäden
Geschachtelte Klassen
|
der Iteratortyp
( Nur zur Darstellung verwendete Member-Klassentemplate* ) |
|
|
der Sentry-Typ
( Nur zur Darstellung verwendete Member-Klassentemplate* ) |
Hinweise
Vor der Annahme von
P2328R1
konnte der innere Bereichstyp (
ranges::
range_reference_t
<
V
>
) kein Containertyp sein (konnte jedoch eine Referenz auf einen Container sein). Beispielsweise war es nicht erlaubt, eine
transform_view
von
std::string
-Prvalue zu verknüpfen.
struct Person { int age; std::string name; }; auto f(std::vector<Person>& v) { // return v | std::views::transform([](auto& p){ return p.name; }) // | std::views::join; // Fehler vor P2328R1 return v | std::views::transform([](auto& p) -> std::string& { return p.name; }) | std::views::join; // OK }
Beispiel
#include <iostream> #include <ranges> #include <string_view> #include <vector> int main() { using namespace std::literals; const auto bits = {"https:"sv, "//"sv, "cppreference"sv, "."sv, "com"sv}; for (char const c : bits | std::views::join) std::cout << c; std::cout << '\n'; const std::vector<std::vector<int>> v{{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}}; auto jv = std::ranges::join_view(v); for (int const e : jv) std::cout << e << ' '; std::cout << '\n'; }
Ausgabe:
https://cppreference.net 1 2 3 4 5 6 7 8 9
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 3474 | C++20 |
views
::
join
(
e
)
gab eine Kopie von
e
zurück, wenn
e
ein
join_view
ist
|
gibt einen verschachtelten
join_view
zurück
|
| P2328R1 | C++20 |
Nicht-View
range
Prvalues konnten nicht durch
join_view
gejoint werden
|
joinfähig gemacht |
Siehe auch
eine
view
bestehend aus der Sequenz, die durch Glätten einer Ansicht von Bereichen mit Trennzeichen zwischen Elementen erhalten wird
(Klassentemplate) (Range-Adapter-Objekt) |
|
eine
view
bestehend aus der Verkettung der angepassten Ansichten
(Klassentemplate) (Anpassungspunkt-Objekt) |