std::ranges::views::split, std::ranges::split_view
From cppreference.com
Defined in header <ranges>
|
||
template< ranges::input_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) |
1)
split_view
takes a view
and a delimiter, and splits the view
into subranges on the delimiter.
Two major scenarios are supported:
- The view is a
input_range
, the delimiter is a single element (wrapped in asingle_view
). - The view is a
forward_range
, the delimiter is aview
of elements.
sized_range
, Pattern::size() is a constant expression, and the value of Pattern::size() is less than or equal to 1
. Notably, empty_view
and single_view
satisfy this concept.2) The expression views::split(E,F) is expression-equivalent to split_view{E,F}.
Contents |
Member functions
constructs a split_view (public member function) | |
returns a copy of the underlying (adapted) view (public member function) | |
returns an iterator to the beginning (public member function) | |
returns an iterator or a sentinel to the end (public member function) |
Nested classes
the iterator type (public member class) | |
the iterator type of the inner range (public member class) |
Deduction guides
Example
Run this code
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> auto print = [](auto const& view) { // `view` is a std::views::split_view::/*outer-iterator*/::value_type for (std::cout << "{ "; const auto element : view) std::cout << element << ' '; std::cout << "} "; }; int main() { constexpr static auto source = { 0, 1,0, 2,3,0, 4,5,6,0, 7,8,9 }; constexpr int delimiter {0}; constexpr std::ranges::split_view split_view {source, delimiter}; std::cout << "splits[" << std::ranges::distance(split_view) << "]: "; for (auto const& split: split_view) print(split); constexpr std::string_view hello { "Hello C++ 20 !" }; std::cout << "\n" "substrings: "; std::ranges::for_each(hello | std::views::split(' '), print); }
Output:
splits[5]: { } { 1 } { 2 3 } { 4 5 6 } { 7 8 9 } substrings: { H e l l o } { C + + } { 2 0 } { ! }
See also
(C++20) |
a view consisting of the sequence obtained from flattening a view of range s(class template) (range adaptor object) |