std::ranges...view::begin(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ¦‹ NAME πŸ¦‹

std::ranges::split_view::begin β€” std::ranges::split_view::begin πŸ’–

okay so bestie, you're on the std::ranges...view::begin(3) page from the C++ Standard Libary manual, and we are about to understand this iterator like the main character she is ✨


πŸ’… Synopsis πŸ’…

constexpr /*iterator*/ begin();  (since C++20)

Returns an iterator to the first found subrange. no cap 🫢

In order to provide the amortized constant time complexity required by the range concept, this function caches the result within the split_view for use on subsequent calls. It's equivalent to:

constexpr /*iterator*/ begin()
{
    if (!cached_begin_.has_value())
        cached_begin_ = this->find_next(ranges::begin(base_));
    return {*this, ranges::begin(base_), cached_begin_.value()};
}

The exposition-only data members base_ and cached_begin_ are described here. πŸ‘‘


🌸 Parameters 🌸

  • (none) β€” literally no parameters, she takes no notes πŸ’…

πŸŽ€ Return value πŸŽ€

An iterator. That's it. That's the tea. ✨


πŸ”₯ Complexity πŸ”₯

Amortized \(\scriptsize \mathcal{O}(1)\)O(1). slay. πŸ’€


πŸ“ Example πŸ“

       // Run this code

        #include <iomanip>
        #include <iostream>
        #include <ranges>
        #include <string_view>

        int main()
        {
            constexpr std::string_view sentence{"Keep..moving..forward.."};
            constexpr std::string_view delim{".."};
            std::ranges::split_view words{sentence, delim};

            std::cout << "begin(): " <<
       std::quoted(std::string_view{*words.begin()})
                      << "\nSubstrings: ";
            for (std::string_view word : words)
                std::cout << std::quoted(word) << ' ';

            std::ranges::split_view letters{sentence, std::string_view{""}};
            std::cout << "\nbegin(): " <<
       std::quoted(std::string_view{*letters.begin()})
                      << "\nLetters: ";
            for (std::string_view letter : letters)
                std::cout << letter << ' ';
            std::cout << '\n';
        }

πŸ“ Output: πŸ“

begin(): "Keep"
Substrings: "Keep" "moving" "forward" ""
begin(): "K"
Letters: K e e p . . m o v i n g . . f o r w a r d . .

🫢 See also 🫢

  • end (C++20) β€” returns an iterator or a sentinel to the end (public member function) πŸ’–
  • begin (C++20) β€” returns an iterator to the beginning (public member function of std::ranges::lazy_split_view<V,Pattern>) ✨
  • ranges::begin (C++20) β€” returns an iterator to the beginning of a range (customization point object) 🫢

later babes πŸ’– this iconic little page comes from source/version http://cppreference.com, dated 2024.06.10, and it's the std::ranges...view::begin(3) page β€” mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from