std::ranges::views::join, std::ranges::join_view
| Definiert in Header <ranges>
|
||
template< ranges::input_range V >
requires ranges::view<V> and
ranges::input_range<ranges::range_reference_t<V>>
class join_view
: public ranges::view_interface<join_view<V>>
|
(1) | (seit C++20) |
namespace views {
inline constexpr /* unspecified */ join = /* unspecified */;
}
|
(2) | (seit C++20) |
| Aufrufsignatur |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto join( R&& r );
|
(seit C++20) | |
views::join(e) ist ausdrucksäquivalent zu join_view<views::all_t<decltype((e))>>{e} für alle geeigneten Unterausdrücke e.join_view modelliert input_range.
join_view modelliert forward_range, wenn:
ranges::range_reference_t<V>ein Referenztyp ist, undVundranges::range_reference_t<V>jeweils forward_range modellieren.
join_view modelliert bidirectional_range, wenn:
ranges::range_reference_t<V>ein Referenztyp ist,Vbidirectional_range modelliert, undranges::range_reference_t<V>sowohl bidirectional_range als auch common_range modelliert.
join_view modelliert common_range, wenn:
ranges::range_reference_t<V>ein Referenztyp ist, undVundranges::range_reference_t<V>jeweils forward_range und common_range modellieren.
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) |
|
Von ranges::view_interface | |
| gibt zurück, ob die abgeleitete Ansicht leer ist, nur verfügbar, wenn sie sized_range oder forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
(C++23) |
gibt einen konstanten Iterator zum Beginn des Bereichs zurück (öffentliche Elementfunktion von std::ranges::view_interface<D>)
|
(C++23) |
gibt eine 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, nur verfügbar, wenn ranges::empty darauf anwendbar ist (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das erste Element in der abgeleiteten Ansicht zurück, verfügbar, wenn sie forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das letzte Element in der abgeleiteten Ansicht zurück, nur verfügbar, 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://de.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) |