std::basic_...ind_last_of(3)

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

🌸 NAME 🌸

okay so bestie, this is std::basic_string_view::find_last_of β€” and the NAME section is literally std::basic_string_view::find_last_of - std::basic_string_view::find_last_of. Yes, it said the same thing twice, and honestly? iconic. πŸ’…

This page is std::basic_...ind_last_of(3) from the C++ Standard Libary manual (that’s the exact header spelling, no cap 😭), and it’s all about finding the last character in a view that matches any character from a sequence you hand it. πŸ¦‹


✨ Synopsis ✨

Four overloads, all since C++17, all cute. Here are the exact synopsis lines from the page, with the overload markers and qualifiers kept intact:

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

the four overloads are numbered (1) through (4), and every single one is since C++17. The const and noexcept qualifiers are in there exactly as the page has them β€” don’t let the scrambled line breaks gaslight you. 🫢

It finds the last character equal to one of the characters in the given character sequence.

The page is very clear that the exact search algorithm is not specified β€” so no guessing at internals, bestie. The search only considers the interval [0, pos]. If the character is not present in that interval, npos will be returned. periodt.

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

πŸ’– Parameters πŸ’–

  • v β€” view to search for.
  • pos β€” position at which the search is to finish.
  • 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 last occurrence of any character of the substring, or npos if no such character is found. that’s the whole tea. β˜•


πŸ¦‹ Complexity πŸ¦‹

O(size() * v.size()) at worst. yes bestie, that’s the complexity line, exactly. 😭


🌈 Example 🌈

The page says // Run this code, and the exact code block is this:

        #include <string_view>

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

        static_assert(
            5 == "delete"sv.find_last_of("cdef"sv) &&
              //       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "double"sv.find_last_of("fghi"sv) &&
              //
            0 == "else"sv.find_last_of("bcde"sv, 2 /* pos [0..2]: "els" */) &&
              //  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "explicit"sv.find_last_of("abcd"sv, 4 /* pos [0..4]: "expli"
       */) &&
              //
            3 == "extern"sv.find_last_of('e') &&
              //     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "false"sv.find_last_of('x') &&
              //
            0 == "inline"sv.find_last_of('i', 2 /* pos [0..2]: "inl" */) &&
              //  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "mutable"sv.find_last_of('a', 2 /* pos [0..2]: "mut" */) &&
              //
            3 == "namespace"sv.find_last_of("cdef", 3 /* pos [0..3]: "name" */,
       3 /* "cde" */) &&
              //     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            N == "namespace"sv.find_last_of("cdef", 3 /* pos [0..3]: "name" */,
       2 /* "cd" */)
        );

        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_first_of β€” find first 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_last_of β€” find last occurrence of characters (public member function of std::basic_string<CharT,Traits,Allocator>).

okay that’s the whole page, bestie. source/version: http://cppreference.com Β· date: 2024.06.10 Β· footer page tag: std::basic_...ind_last_of(3). now go slay your string views πŸ’–βœ¨

πŸ“¦ where this page comes from