std::ranges::views::split, std::ranges::split_view
| Defined in header  <ranges> | ||
| template< ranges::forward_range V, ranges::forward_range Pattern > requires ranges::view<V> && ranges::view<Pattern> && | (1) | (since C++20) | 
| namespace views {     inline constexpr /*unspecified*/ split = /*unspecified*/; | (2) | (since C++20) | 
| Call signature | ||
| template< ranges::viewable_range R, class Pattern >     requires /* see below */ | ||
| template< class Pattern > constexpr /*range adaptor closure*/ split( Pattern&& pattern ); | ||
split_view models the concepts forward_range, and common_range when the underlying view V models respective concepts.
The inner range (ranges::range_reference_t<split_view>) is a ranges::subrange<ranges::iterator_t<V>>, which models common_range, models sized_range when ranges::iterator_t<V> models std::sized_sentinel_for<ranges::iterator_t<V>>, and models contiguous_range, random_access_range, bidirectional_range, and forward_range when V models respective concepts.
Expression-equivalent
Expression e is expression-equivalent to expression f, if e and f have the same effects, either are both potentially-throwing or are both not potentially-throwing (i.e. noexcept(e) == noexcept(f)), and either are both constant subexpressions or are both not constant subexpressions.
Data members
Typical implementations of split_view hold three non-static data members:
-  the underlying viewof typeV(shown here asbase_for exposition only), and
-  the pattern (shown here as pattern_for exposition only) that is used as a delimiter to split the underlyingview.
-  an object equivalent to std::optional<ranges::subrange<ranges::iterator_t<V>>> (shown here as cached_begin_for exposition only) that caches the result of a first call tobegin().
Member functions
| (C++20) | constructs a split_view(public member function) | 
| (C++20) | returns a copy of the underlying (adapted) view (public member function) | 
| (C++20) | returns an iterator to the beginning (public member function) | 
| (C++20) | returns an iterator or a sentinel to the end (public member function) | 
| (C++20) | searches for the next occurrence of the pattern (exposition-only member function) | 
| Inherited from std::ranges::view_interface | |
| (C++20) | Returns whether the derived view is empty. Provided if it satisfies forward_range.(public member function of std::ranges::view_interface<D>) | 
| (C++20) | Returns whether the derived view is not empty. Provided if ranges::empty is applicable to it. (public member function of std::ranges::view_interface<D>) | 
| (C++20) | Returns the first element in the derived view. Provided if it satisfies forward_range.(public member function of std::ranges::view_interface<D>) | 
Nested classes
| (C++20) | the iterator type (exposition-only member class) | 
| (C++20) | the sentinel type (exposition-only member class) | 
Deduction guides
Notes
Example
A link to check the example: wandbox
#include <iostream> #include <iomanip> #include <ranges> #include <string_view> int main() { constexpr std::string_view words{"Hello-_-C++-_-20-_-!"}; constexpr std::string_view delim{"-_-"}; for (const auto word : std::views::split(words, delim)) { std::cout << std::quoted(std::string_view(word.begin(), word.end())) << ' '; } }
Output:
"Hello" "C++" "20" "!"
See also
| a viewover the subranges obtained from splitting anotherviewusing a delimiter(class template) (range adaptor object) | |
| (C++20) | a viewconsisting of the sequence obtained from flattening aviewofranges(class template) (range adaptor object) |