std::ranges:: views:: concat, std::ranges:: concat_view
|
Definiert im Header
<ranges>
|
||
|
template
<
ranges::
input_range
...
Views
>
erfordert
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
&&
|
(1) | (seit C++26) |
|
namespace
views
{
inline
constexpr
/* unspecified */
concat
=
/* unspecified */
;
|
(2) | (seit C++26) |
|
Aufrufsignatur
|
||
|
template
<
ranges::
viewable_range
...
Rs
>
requires
/* siehe unten */
|
(seit C++26) | |
|
Hilfstyp-Aliase
|
||
|
template
<
class
...
Rs
>
using
/*concat-reference-t*/
=
|
(3) | ( exposition only* ) |
|
template
<
class
...
Rs
>
using /*concat-value-t*/ = std:: common_type_t < ranges:: range_value_t < Rs > ... > ; |
(4) | ( Nur zur Darstellung* ) |
|
template
<
class
...
Rs
>
using
/*concat-rvalue-reference-t*/
=
|
(5) | ( Nur zur Darstellung* ) |
|
Hilfskonzepte
|
||
|
template
<
class
Ref,
class
RRef,
class
It
>
concept /*concat-indirectly-readable-impl*/ = /* siehe Beschreibung */ ; |
(6) | ( nur zur Darstellung* ) |
|
template
<
class
...
Rs
>
concept /*concatable*/ = /* siehe Beschreibung */ ; |
(7) | ( nur zur Darstellung* ) |
concat_view
stellt eine
view
Factory bereit, die eine beliebige Anzahl von Bereichen als Argumentliste entgegennimmt und eine Ansicht bietet, die beim ersten Element des ersten Bereichs beginnt, beim letzten Element des letzten Bereichs endet und dabei alle Elemente der Bereiche in der Reihenfolge der Argumente zwischensequenziert, wodurch die Argumentbereiche effektiv verkettet oder aneinandergereiht werden.
view
s
ist, von denen jede mindestens
input_range
modelliert und
concatable
(7)
ist.
views::concat
ist ein Customization Point Object.
Gegeben einen Pack von Subausdrücken exprs , ist der Ausdruck views :: concat ( exprs... ) ausdrucksäquivalent zu
-
views::
all
(
exprs...
)
falls
exprs
ein Pack mit nur einem Element ist, dessen Typ
input_rangemodelliert, - concat_view ( exprs... ) andernfalls.
iterator
::value_type
der zusätzlich die
value_type
der zugrundeliegenden Ranges respektiert, um die Fälle zu unterstützen, in denen die zugrundeliegenden Ranges Proxy-Iteratoren haben.
iter_move
anpassen.
indirectly-readable
Konzept für den
iterator
, sodass
concat_view
das
input_range
modellieren kann.
template< class... Rs > concept /*concat-indirectly-readable*/ = // nur zur Darstellung std::common_reference_with</*concat-reference-t*/<Rs...>&&, /*concat-value-t*/<Rs...>&> && std::common_reference_with</*concat-reference-t*/<Rs...>&&, /*concat-rvalue-reference-t*/<Rs...>&&> && std::common_reference_with</*concat-rvalue-reference-t*/<Rs...>&&, /*concat-value-t*/<Rs...> const&> && (/*concat-indirectly-readable-impl*/</*concat-reference-t*/<Rs...>, /*concat-rvalue-reference-t*/<Rs...>, ranges::iterator_t<Rs>> && ...);
template< class Ref, class RRef, class It > concept /*concat-indirectly-readable-impl*/ = // exposition only requires(const It it) { { *it } -> std::convertible_to<Ref>; { ranges::iter_move(it)} -> std::convertible_to<RRef>; };
template< class... Rs > concept /*concatable*/ = requires { // exposition only typename /*concat-reference-t*/<Rs...>; typename /*concat-value-t*/<Rs...>; typename /*concat-rvalue-reference-t*/<Rs...>; } && /*concat-indirectly-readable*/<Rs...>;
concat_view
modelliert stets
input_range
und modelliert
forward_range
,
bidirectional_range
,
random_access_range
oder
sized_range
, falls jeder adaptierte
view
-Typ das entsprechende Konzept modelliert.
concat_view
kann ein
common_range
sein, wenn der letzte zugrundeliegende Bereich
common_range
modelliert.
Inhaltsverzeichnis |
Customization Point Objects
Der Name
views::concat
bezeichnet ein
Customization Point Object
, welches ein konstantes
Function Object
eines
Literal
semiregular
-Klassentyps ist. Weitere Details finden Sie unter
CustomizationPointObject
.
Datenmitglieder
| Mitglied | Beschreibung |
std::
tuple
<
Views...
>
views_
|
Alle angepassten View-Objekte
( Nur-Darstellungs-Mitgliedsobjekt* ) |
Memberfunktionen
konstruiert einen
concat_view
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion) |
|
gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn der zugrundeliegende (adaptierte) Bereich
sized_range
erfüllt
(ö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>
)
|
|
gibt das
n
te
Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
random_access_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Deduktionshilfen
Geschachtelte Klassen
| Klassenname | Definition |
|
der Iteratortyp
( Nur zur Darstellung dienende Mitgliedsklassenvorlage* ) |
Hilfsvorlagen
Es gibt keine Spezialisierung von
ranges::
enable_borrowed_range
für
concat_view
, da dies erfordern würde, dass die Iterator-Implementierung zu jeder Zeit eine Kopie aller Iteratoren und Sentinel-Objekte aller zugrundeliegenden Bereiche enthalten müsste.
Hinweise
Kein Argument
views
::
concat
(
)
ist fehlerhaft, da es keine sinnvolle Möglichkeit gibt, einen Elementtyp
T
zu bestimmen. Ein einzelnes Argument
views
::
concat
(
r
)
ist ausdrucksäquivalent zu
views::
all
(
r
)
.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_concat
|
202403L
|
(C++26) |
std::ranges::concat_view
|
Beispiel
Die Vorabversion kann auf Compiler Explorer eingesehen werden.
#include <cassert> #include <list> #include <print> #include <ranges> #include <vector> int main() { std::vector<int> v0{1, 2, 3}, v1{4, 5}; int a[]{6, 7}; int i{8}; auto ie{std::views::single(i)}; auto con = std::views::concat(v0, v1, a, ie); assert(con.size() == v0.size() + v1.size() + std::size(a) + ie.size()); std::println("con.size(): {}", con.size()); std::println("con: {}", con); con[6] = 42; // con is random_access_range, operator[] returns a reference assert(a[1] == 42); // a[1] was modified via con[6] std::println("con: {}", con); std::list<int> l{7, 8}; // list is bidirectional range auto cat = std::views::concat(v0, l); std::println("cat: {}", cat); // cat[0] = 13; // compile-time error: cat is bidirectional => no operator[] }
Ausgabe:
con.size(): 8 con: [1, 2, 3, 4, 5, 6, 7, 8] con: [1, 2, 3, 4, 5, 6, 42, 8] cat: [1, 2, 3, 7, 8]
Referenzen
- C++26-Standard (ISO/IEC 14882:2026):
-
- 26.7.18 Concat-Ansicht [range.concat]
Siehe auch
|
(C++20)
|
eine
view
bestehend aus der durch Abflachen einer
view
von
range
s
erhaltenen Sequenz
(Klassentemplate) (Range-Adapter-Objekt) |
eine
view
bestehend aus der durch Abflachen einer View von Ranges erhaltenen Sequenz, mit Trennzeichen zwischen Elementen
(Klassentemplate) (Range-Adapter-Objekt) |
|
|
(C++23)
|
eine
view
bestehend aus Tupeln von Referenzen auf entsprechende Elemente der adaptierten Views
(Klassentemplate) (Customization-Point-Objekt) |
eine
view
bestehend aus Tupeln von Ergebnissen, berechnet durch das n-äre kartesische Produkt der adaptierten Views
(Klassentemplate) (Customization-Point-Objekt) |