std::basic_...ind_first_of(3)

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

🌸 NAME 🌸

okay so you're on the std::basic_...ind_first_of(3) page from the C++ Standard Libary manual (yes, that's the manual name as printed, bestie πŸ’…), and the whole icon of this page is:

  • std::basic_string_view::find_first_of β€” std::basic_string_view::find_first_of

✨ Synopsis ✨

four overloads, all constexpr size_type, all since C++17. here's the synopsis exactly as it was handed to me:

          constexpr size_type
              find_first_of( basic_string_view v, size_type pos = 0 ) const
       (1) (since C++17)
          noexcept;
          constexpr size_type
       (2) (since C++17)
              find_first_of( CharT ch, size_type pos = 0 ) const noexcept;
          constexpr size_type
              find_first_of( const CharT* s, size_type pos, size_type count
       (3) (since C++17)
          ) const;
          constexpr size_type
       (4) (since C++17)
              find_first_of( const CharT* s, size_type pos = 0 ) const;

quick vibe check: overloads (1) and (2) are the noexcept girlies, and all four are constexpr size_type with since C++17 energy 🫢


πŸ’– DESCRIPTION πŸ’–

okay so the core sentence is literally:

Finds the first character equal to any of the characters in the given character sequence.

and here's the overload-by-overload tea:

  • 1) Finds the first occurrence of any of the characters of v in this view, starting at position pos.
  • 2) Equivalent to find_first_of(basic_string_view(std::addressof(ch), 1), pos).
  • 3) Equivalent to find_first_of(basic_string_view(s, count), pos).
  • 4) Equivalent to find_first_of(basic_string_view(s), pos).

no cap, that's the whole search situation πŸ’…


πŸŽ€ Parameters πŸŽ€

  • v β€” view to search for
  • pos β€” position at which to start the search
  • count β€” length of the string of characters to search for
  • s β€” pointer to a string of characters to search for
  • ch β€” character to search for

πŸ¦‹ Return value πŸ¦‹

Position of the first occurrence of any character of the substring, or npos if no such character is found. that's it, that's the return value, periodt 🫢


πŸ”₯ Complexity πŸ”₯

O(size() * v.size()) at worst.

not me doing a little complexity vibe check and finding it at worst, but okay, we move 🌈


🌈 Example 🌈

run this code, bestie β€” the comments are literal little maps πŸ—ΊοΈβœ¨

       // Run this code

        #include <string_view>

        using namespace std::literals;
        constexpr auto N = std::string_view::npos;

        constexpr bool is_white_space(const char c)
        {
            return " \t\n\f\r\v"sv.find_first_of(c) != N;
        };

        static_assert(
            1 == "alignas"sv.find_first_of("klmn"sv) &&
              //   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "alignof"sv.find_first_of("wxyz"sv) &&
              //
            3 == "concept"sv.find_first_of("bcde"sv, /* pos= */ 1) &&
              //     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "consteval"sv.find_first_of("oxyz"sv, /* pos= */ 2) &&
              //
            6 == "constexpr"sv.find_first_of('x') &&
              //        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "constinit"sv.find_first_of('x') &&
              //
            6 == "const_cast"sv.find_first_of('c', /* pos= */ 4) &&
              //        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "continue"sv.find_first_of('c', /* pos= */ 42) &&
              //
            5 == "co_await"sv.find_first_of("cba", /* pos= */ 4) &&
              //       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            7 == "decltype"sv.find_first_of("def", /* pos= */ 2, /* count= */
       2) &&
              //         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "decltype"sv.find_first_of("def", /* pos= */ 2, /* count= */
       1) &&
              //
            is_white_space(' ') && is_white_space('\r') &&
       !is_white_space('\a')
        );

        int main() {}

πŸ’œ See also πŸ’œ

  • find β€” find characters in the view (public member function)
  • rfind β€” find the last occurrence of a substring (public member function)
  • find_last_of β€” find last occurrence of characters (public member function)
  • find_first_not_of β€” find first absence of characters (public member function)
  • find_last_not_of β€” find last absence of characters (public member function)
  • find_first_of β€” find first occurrence of characters (public member function of std::basic_string<CharT,Traits,Allocator>)

mwah πŸ’‹ source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::basic_...ind_first_of(3)

πŸ“¦ where this page comes from