...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::basic_string_view
// In header: <boost/utility/string_view.hpp> template<typename charT, typename traits> class basic_string_view { public: // types typedef traits traits_type; typedef charT value_type; typedef charT * pointer; typedef const charT * const_pointer; typedef charT & reference; typedef const charT & const_reference; typedef const_pointer const_iterator; typedef const_iterator iterator; typedef std::reverse_iterator< const_iterator > const_reverse_iterator; typedef const_reverse_iterator reverse_iterator; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; // public member functions basic_string_view() noexcept; basic_string_view(const basic_string_view &); basic_string_view & operator=(const basic_string_view &); template<typename Allocator> basic_string_view(const std::basic_string< charT, traits, Allocator > &) noexcept; basic_string_view(const charT *); basic_string_view(const charT *, size_type); const_iterator begin() const noexcept; const_iterator cbegin() const noexcept; const_iterator end() const noexcept; const_iterator cend() const noexcept; const_reverse_iterator rbegin() const noexcept; const_reverse_iterator crbegin() const noexcept; const_reverse_iterator rend() const noexcept; const_reverse_iterator crend() const noexcept; size_type size() const noexcept; size_type length() const noexcept; size_type max_size() const noexcept; bool empty() const noexcept; const_reference operator[](size_type) const noexcept; const_reference at(size_type) const; const_reference front() const; const_reference back() const; const_pointer data() const noexcept; void clear() noexcept; void remove_prefix(size_type); void remove_suffix(size_type); void swap(basic_string_view &) noexcept; template<typename Allocator> explicit operator std::basic_string< charT, traits, Allocator >() const; template<typename Allocator = std::allocator<charT> > std::basic_string< charT, traits, Allocator > to_string(const Allocator & = Allocator()) const; size_type copy(charT *, size_type, size_type = 0) const; basic_string_view substr() const; basic_string_view substr(size_type, size_type = npos) const; int compare(basic_string_view) const noexcept; int compare(size_type, size_type, basic_string_view) const; int compare(size_type, size_type, basic_string_view, size_type, size_type) const; int compare(const charT *) const; int compare(size_type, size_type, const charT *) const; int compare(size_type, size_type, const charT *, size_type) const; bool starts_with(charT) const noexcept; bool starts_with(basic_string_view) const noexcept; bool ends_with(charT) const noexcept; bool ends_with(basic_string_view) const noexcept; bool contains(basic_string_view) const noexcept; bool contains(charT) const noexcept; bool contains(const charT *) const noexcept; size_type find(basic_string_view, size_type = 0) const noexcept; size_type find(charT, size_type = 0) const noexcept; size_type find(const charT *, size_type, size_type) const noexcept; size_type find(const charT *, size_type = 0) const noexcept; size_type rfind(basic_string_view, size_type = npos) const noexcept; size_type rfind(charT, size_type = npos) const noexcept; size_type rfind(const charT *, size_type, size_type) const noexcept; size_type rfind(const charT *, size_type = npos) const noexcept; size_type find_first_of(basic_string_view, size_type = 0) const noexcept; size_type find_first_of(charT, size_type = 0) const noexcept; size_type find_first_of(const charT *, size_type, size_type) const noexcept; size_type find_first_of(const charT *, size_type = 0) const noexcept; size_type find_last_of(basic_string_view, size_type = npos) const noexcept; size_type find_last_of(charT, size_type = npos) const noexcept; size_type find_last_of(const charT *, size_type, size_type) const noexcept; size_type find_last_of(const charT *, size_type = npos) const noexcept; size_type find_first_not_of(basic_string_view, size_type = 0) const noexcept; size_type find_first_not_of(charT, size_type = 0) const noexcept; size_type find_first_not_of(const charT *, size_type, size_type) const noexcept; size_type find_first_not_of(const charT *, size_type = 0) const noexcept; size_type find_last_not_of(basic_string_view, size_type = npos) const noexcept; size_type find_last_not_of(charT, size_type = npos) const noexcept; size_type find_last_not_of(const charT *, size_type, size_type) const noexcept; size_type find_last_not_of(const charT *, size_type = npos) const noexcept; // private member functions template<typename r_iter> size_type reverse_distance(r_iter, r_iter) const noexcept; template<typename Iterator> Iterator find_not_of(Iterator, Iterator, basic_string_view) const noexcept; // public data members static size_type npos; };
basic_string_view
public member functionsbasic_string_view() noexcept;
basic_string_view(const basic_string_view & rhs);
basic_string_view & operator=(const basic_string_view & rhs);
template<typename Allocator> basic_string_view(const std::basic_string< charT, traits, Allocator > & str) noexcept;
basic_string_view(const charT * str);
basic_string_view(const charT * str, size_type len);
const_iterator begin() const noexcept;
const_iterator cbegin() const noexcept;
const_iterator end() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator rbegin() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator rend() const noexcept;
const_reverse_iterator crend() const noexcept;
size_type size() const noexcept;
size_type length() const noexcept;
size_type max_size() const noexcept;
bool empty() const noexcept;
const_reference operator[](size_type pos) const noexcept;
const_reference at(size_type pos) const;
const_reference front() const;
const_reference back() const;
const_pointer data() const noexcept;
void clear() noexcept;
void remove_prefix(size_type n);
void remove_suffix(size_type n);
void swap(basic_string_view & s) noexcept;
template<typename Allocator> explicit operator std::basic_string< charT, traits, Allocator >() const;
template<typename Allocator = std::allocator<charT> > std::basic_string< charT, traits, Allocator > to_string(const Allocator & a = Allocator()) const;
size_type copy(charT * s, size_type n, size_type pos = 0) const;
basic_string_view substr() const;
basic_string_view substr(size_type pos, size_type n = npos) const;
int compare(basic_string_view x) const noexcept;
int compare(size_type pos1, size_type n1, basic_string_view x) const;
int compare(size_type pos1, size_type n1, basic_string_view x, size_type pos2, size_type n2) const;
int compare(const charT * x) const;
int compare(size_type pos1, size_type n1, const charT * x) const;
int compare(size_type pos1, size_type n1, const charT * x, size_type n2) const;
bool starts_with(charT c) const noexcept;
bool starts_with(basic_string_view x) const noexcept;
bool ends_with(charT c) const noexcept;
bool ends_with(basic_string_view x) const noexcept;
bool contains(basic_string_view s) const noexcept;
bool contains(charT c) const noexcept;
bool contains(const charT * s) const noexcept;
size_type find(basic_string_view s, size_type pos = 0) const noexcept;
size_type find(charT c, size_type pos = 0) const noexcept;
size_type find(const charT * s, size_type pos, size_type n) const noexcept;
size_type find(const charT * s, size_type pos = 0) const noexcept;
size_type rfind(basic_string_view s, size_type pos = npos) const noexcept;
size_type rfind(charT c, size_type pos = npos) const noexcept;
size_type rfind(const charT * s, size_type pos, size_type n) const noexcept;
size_type rfind(const charT * s, size_type pos = npos) const noexcept;
size_type find_first_of(basic_string_view s, size_type pos = 0) const noexcept;
size_type find_first_of(charT c, size_type pos = 0) const noexcept;
size_type find_first_of(const charT * s, size_type pos, size_type n) const noexcept;
size_type find_first_of(const charT * s, size_type pos = 0) const noexcept;
size_type find_last_of(basic_string_view s, size_type pos = npos) const noexcept;
size_type find_last_of(charT c, size_type pos = npos) const noexcept;
size_type find_last_of(const charT * s, size_type pos, size_type n) const noexcept;
size_type find_last_of(const charT * s, size_type pos = npos) const noexcept;
size_type find_first_not_of(basic_string_view s, size_type pos = 0) const noexcept;
size_type find_first_not_of(charT c, size_type pos = 0) const noexcept;
size_type find_first_not_of(const charT * s, size_type pos, size_type n) const noexcept;
size_type find_first_not_of(const charT * s, size_type pos = 0) const noexcept;
size_type find_last_not_of(basic_string_view s, size_type pos = npos) const noexcept;
size_type find_last_not_of(charT c, size_type pos = npos) const noexcept;
size_type find_last_not_of(const charT * s, size_type pos, size_type n) const noexcept;
size_type find_last_not_of(const charT * s, size_type pos = npos) const noexcept;
basic_string_view
private member functionstemplate<typename r_iter> size_type reverse_distance(r_iter first, r_iter last) const noexcept;
template<typename Iterator> Iterator find_not_of(Iterator first, Iterator last, basic_string_view s) const noexcept;