std::basic_..._last_not_of(3)
πΈ NAME πΈ
okay so bestie, welcome to the manual page for std::basic_..._last_not_of(3), straight out of the C++ Standard Library. The actual star is std::basic_string::find_last_not_of β yes, that whole mouthful β and it's giving βfind the last character that is not in this setβ energy. π
β¨ Synopsis β¨
size_type find_last_not_of( const basic_string& str,
size_type pos = npos ) const;
size_type find_last_not_of( const CharT* s,
size_type pos, size_type count ) const;
size_type find_last_not_of( const CharT* s,
size_type pos = npos ) const;
size_type find_last_not_of( CharT ch,
size_type pos = npos ) const;
template< class StringViewLike >
size_type find_last_not_of( const StringViewLike& t,
size_type pos = npos ) const
noexcept(/* see below */);
Overload tea, in order β:
- overload (1) β
noexceptsince C++11,constexprsince C++20. - overload (2) β
constexprsince C++20. - overload (3) β
constexprsince C++20. - overload (4) β
noexceptsince C++11,constexprsince C++20. - overload (5) β since C++17,
constexprsince C++20.
So what does it actually do? It finds the last character equal to none of the characters in the given character sequence. The search only looks at the range [0, pos]. And if every character in that range can be found in the given character sequence, it returns npos. No cap. π«Ά
Here's the overload-by-overload breakdown:
- Finds the last character equal to none of the characters in
str. - Finds the last character equal to none of the characters in the range
[s, s + count). This range can include null characters. π¨ If[s, s + count)is not a valid range, the behavior is undefined β not cute, don't do it. - Finds the last character equal to none of the characters in the character string pointed to by
s. The length of the string is determined by the first null character usingTraits::length(s). π¨ If[s, s + Traits::length(s))is not a valid range, the behavior is undefined. - Finds the last character not equal to
ch. - Implicitly converts
tto a string viewsvas if bystd::basic_string_view<CharT, Traits> sv = t;, then finds the last character equal to none of the characters insv. This overload participates in overload resolution only ifstd::is_convertible_v<const StringViewLike&, std::basic_string_view<CharT, Traits>>is true andstd::is_convertible_v<const StringViewLike&, const CharT*>is false.
In all cases, equality is checked by calling Traits::eq. periodt. β¨
π Parameters π
strβ string identifying characters to search forposβ position at which to end searchcountβ length of character string identifying characters to search forsβ pointer to a character string identifying characters to search forchβ character identifying characters to search fortβ object (convertible tostd::basic_string_view) identifying characters to search for
π Return value π
Position of the found character, or npos if no such character is found. That's it, that's the whole vibe. π
π Exceptions π
Overloads 1 and 4 throw nothing. Iconic behavior, honestly.
Overload 5 has this noexcept specification:
noexcept(std::is_nothrow_convertible_v<
const T&, std::basic_string_view<CharT, Traits>>)
If an exception is thrown for any reason, this function has no effect β it has the strong exception safety guarantee. π‘οΈ
π¦ Example π¦
// Run this code
#include <iostream>
#include <string>
void show_pos(const std::string& str, std::string::size_type found)
{
if (found != std::string::npos)
std::cout << '[' << found << "] = \'" << str[found] << "\'\n";
else
std::cout << "not found\n";
}
int main()
{
std::string str{"abc_123"};
char const* skip_set{"0123456789"};
std::string::size_type str_last_pos{std::string::npos};
show_pos(str, str.find_last_not_of(skip_set)); // [3] = '_'
str_last_pos = 2;
show_pos(str, str.find_last_not_of(skip_set, str_last_pos)); // [2] = 'c'
str_last_pos = 2;
show_pos(str, str.find_last_not_of('c', str_last_pos)); // [1] = 'b'
const char arr[]{'3', '4', '5'};
show_pos(str, str.find_last_not_of(arr)); // [5] = '2'
str_last_pos = 2;
std::string::size_type skip_set_size{4};
show_pos(str, str.find_last_not_of(skip_set,
str_last_pos,
skip_set_size)); // [2] = 'c'
show_pos(str, str.find_last_not_of("abc")); // [6] = '3'
str_last_pos = 2;
show_pos(str, str.find_last_not_of("abc", str_last_pos)); // not found
}
π Output π
[3] = '_'
[2] = 'c'
[1] = 'b'
[5] = '2'
[2] = 'c'
[6] = '3'
not found
π§ Defect reports π§
The following behavior-changing defect reports were applied retroactively to previously published C++ standards. History really said βlet me fix that for you.β π
- LWG 141 β applied to C++98. Before: overload (1) could only return
nposifpos >= size(). After: the search range is[0, size())in this case. - LWG 847 β applied to C++98. Before: there was no exception safety guarantee. After: added strong exception safety guarantee.
- LWG 2064 β applied to C++11. Before: overloads (3,4) were
noexcept. After: removed. - LWG 2946 β applied to C++17. Before: overload (5) caused ambiguity in some cases. After: avoided by making it a template.
- P1148R0 β applied to C++11, C++17. Before:
noexceptfor overloads (4,5) were accidentally dropped by LWG2064/LWG2946. After: restored.
π₯ See also π₯
findβ finds the first occurrence of the given substring (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_ofβ find last occurrence of characters (public member function)find_last_not_ofβ find last absence of characters (public member function)find_last_not_ofβ find last absence of characters (public member function ofstd::basic_string_view<CharT,Traits>)
π Category π
- conditionally noexcept
π«Ά that's the whole page, bestie. source:http://cppreference.com, version/date:2024.06.10, page:std::basic_..._last_not_of(3). mwah π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms