std::ranges::views::split, std::ranges::split_view
| Definiert in Header <ranges>
|
||
template< ranges::forward_range V, ranges::forward_range Pattern >
requires ranges::view<V> &&
ranges::view<Pattern> &&
std::indirectly_comparable<ranges::iterator_t<V>,
ranges::iterator_t<Pattern>,
ranges::equal_to>
class split_view
: public ranges::view_interface<split_view<V, Pattern>>
|
(1) | (seit C++20) |
namespace views {
inline constexpr /* unspecified */ split = /* unspecified */;
}
|
(2) | (seit C++20) |
| Aufrufsignatur |
||
template< ranges::viewable_range R, class Pattern >
requires /* see below */
constexpr ranges::view auto split( R&& r, Pattern&& pattern );
|
(seit C++20) | |
template< class Pattern >
constexpr /* range adaptor closure */ split( Pattern&& pattern );
|
(seit C++20) | |
split_view nimmt eine view und ein Trennzeichen und teilt die view am Trennzeichen in Unterbereiche auf.views::split(e, p) ist ausdrucksäquivalent zu split_view(e, p) für alle geeigneten Teilausdrücke e und p.split_view modelliert die Konzepte forward_range, und common_range, wenn die zugrundeliegende view V die entsprechenden Konzepte modelliert.
Der innere Bereich (ranges::range_reference_t<split_view>) ist eine ranges::subrange<ranges::iterator_t<V>>, die common_range modelliert, sized_range modelliert, wenn ranges::iterator_t<V> std::sized_sentinel_for<ranges::iterator_t<V>> modelliert, und contiguous_range, random_access_range, bidirectional_range und forward_range modelliert, wenn V die entsprechenden Konzepte modelliert.
Im Gegensatz zu lazy_split_view bewahrt split_view die Kontinuität des Unterbereichs, was ihn für die Zeichenkettenaufteilung geeignet macht.
Datenmitglieder
| Member | Beschreibung |
V
base_
(private)
|
die zugrundeliegende (angepasste)
view
( exposition-only member object* ) |
Pattern
pattern_
(private)
|
das Musterobjekt, das als Trennzeichen zum Aufteilen der zugrundeliegenden
view
verwendet wird
( exposition-only member object* ) |
non-propagating-cache
<
ranges::
subrange
<
ranges::
iterator_t
<
V
>>>
cached_begin_
(private)
|
ein Objekt, das das Ergebnis des ersten Aufrufs von
begin()
zwischenspeichert
( exposition-only member object* ) |
Memberfunktionen
konstruiert einen
split_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) |
|
|
sucht nach dem nächsten Vorkommen des Musters
( Nur zur Darstellung verwendete Elementfunktion* ) |
|
Geerbt von ranges::view_interface | |
| gibt zurück, ob die abgeleitete Ansicht leer ist, nur bereitgestellt, 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, nur bereitgestellt, 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>)
| |
Geschachtelte Klassen
|
der Iteratortyp
( Nur zur Darstellung dienende Memberklasse* ) |
|
|
der Sentineltyp
( Nur zur Darstellung dienende Memberklasse* ) |
Deduktionshilfen
Hinweise
Vor
P2210R2
verwendete
split_view
einen
lazy
-Mechanismus für die Aufteilung und konnte daher die bidirektionalen, wahlfreien Zugriffs- oder zusammenhängenden Eigenschaften der zugrunde liegenden Ansicht nicht beibehalten oder den Iteratortyp des inneren Bereichs gleich dem der zugrunde liegenden Ansicht machen. Daher wurde es von
P2210R2
neu gestaltet, und der lazy-Mechanismus wurde zu
lazy_split_view
verschoben.
Das Trennzeichen
pattern
sollte generell kein gewöhnlicher String-Literal sein, da es den Null-Terminator als notwendigen Teil des Trennzeichens betrachten wird; daher ist es ratsam, stattdessen einen
std::string_view
-Literal zu verwenden.
Beispiel
#include <iomanip> #include <iostream> #include <ranges> #include <string_view> int main() { using std::operator""sv; constexpr auto words{"Hello^_^C++^_^20^_^!"sv}; constexpr auto delim{"^_^"sv}; for (const auto word : std::views::split(words, delim)) // with string_view's C++23 range constructor: std::cout << std::quoted(std::string_view(word)) << ' '; std::cout << '\n'; }
Ausgabe:
"Hello" "C++" "20" "!"
` und `` Tags (C++ Code)
- C++ spezifische Begriffe und Syntax
- Kommentare im Code (wie "// with string_view's C++23 range constructor:")
- Ausgabetext im Output-Bereich
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 |
|---|---|---|---|
| P2210R2 | C++20 |
die alte
split_view
war zu träge für eine einfache Verwendung
|
sie wurde neu gestaltet |
Siehe auch
eine
view
über die Teilbereiche, die durch Aufteilung einer anderen
view
mittels eines Trennzeichens erhalten werden
(Klassentemplate) (Range-Adapter-Objekt) |
|
|
(C++20)
|
eine
view
bestehend aus der Sequenz, die durch Abflachen einer
view
von
range
s
erhalten wird
(Klassentemplate) (Range-Adapter-Objekt) |