# std::basic_string_view

From cppreference.com
< cpp‎ | string

Defined in header `<string_view>` |  |
template< class CharT, class Traits = std::char_traits<CharT> > class basic_string_view; |  | (since C++17)

The class template `basic_string_view` describes an object that can refer to a constant contiguous sequence of char-like objects with the first element of the sequence at position zero.

A typical implementation holds only two members: a pointer to constant `CharT` and a size.

Several typedefs for common character types are provided:

Defined in header `<string_view>`
Type | Definition
std::string_view | std::basic_string_view<char>
std::wstring_view | std::basic_string_view<wchar_t>
std::u8string_view | std::basic_string_view<char8_t> (C++20)
std::u16string_view | std::basic_string_view<char16_t>
std::u32string_view | std::basic_string_view<char32_t>

### Template parameters

CharT | - | character type
Traits | - | CharTraits class specifying the operations on the character type. Like for `basic_string`, Traits::char_type must name the same type as CharT or the program is ill-formed.

### Member types

Member type | Definition
`traits_type` | `Traits`
`value_type` | `CharT`
`pointer` | `CharT*`
`const_pointer` | `const CharT*`
`reference` | `CharT&`
`const_reference` | `const CharT&`
`const_iterator` | implementation-defined constant LegacyRandomAccessIterator, ConstexprIterator (since C++20) and LegacyContiguousIterator whose `value_type` is `CharT`
`iterator` | `const_iterator`
`reverse_iterator` | `const_reverse_iterator`
`const_reverse_iterator` | std::reverse_iterator<const_iterator>
`size_type` | std::size_t
`difference_type` | std::ptrdiff_t

Note: `iterator` and `const_iterator` are the same type because string views are views into constant character sequences.

All requirements on the iterator types of a Container applies to the `iterator` and `const_iterator` types of `basic_string_view` as well.

### Member functions

(constructor) | constructs a `basic_string_view` (public member function)
operator= | assigns a view (public member function)

##### Iterators

begin cbegin | returns an iterator to the beginning (public member function)
end cend | returns an iterator to the end (public member function)
rbegin crbegin | returns a reverse iterator to the beginning (public member function)
rend crend | returns a reverse iterator to the end (public member function)

##### Element access

operator[] | accesses the specified character (public member function)
at | accesses the specified character with bounds checking (public member function)
front | accesses the first character (public member function)
back | accesses the last character (public member function)
data | returns a pointer to the first character of a view (public member function)

##### Capacity

size length | returns the number of characters (public member function)
max_size | returns the maximum number of characters (public member function)
empty | checks whether the view is empty (public member function)

##### Modifiers

remove_prefix | shrinks the view by moving its start forward (public member function)
remove_suffix | shrinks the view by moving its end backward (public member function)
swap | swaps the contents (public member function)

##### Operations

copy | copies characters (public member function)
substr | returns a substring (public member function)
compare | compares two views (public member function)
starts_with (C++20) | checks if the string view starts with the given prefix (public member function)
ends_with (C++20) | checks if the string view ends with the given suffix (public member function)
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_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)

### Constants

npos [static] | special value. The exact meaning depends on the context (public static member constant)

### Non-member functions

operator==operator!=operator<operator>operator<=operator>= | lexicographically compares two string views (function template)
begin end (C++20) | returns iterators to the beginning and the end of the string view (function)

##### Input/output

operator<< | performs stream output on string views (function template)

### Literals

Defined in inline namespace `std::literals::string_view_literals`
operator""sv (C++17) | Creates a string view of a character array literal (function)

### Helper classes

std::hash<std::string_view>std::hash<std::wstring_view>std::hash<std::u8string_view>std::hash<std::u16string_view>std::hash<std::u32string_view> (C++17)(C++17)(C++20)(C++17)(C++17) | hash support for string views (class template specialization)

### Notes

It is the programmer's responsibility to ensure that `std::string_view` does not outlive the pointed-to character array:

    std::string_view good("a string literal");   // OK: "good" points to a static array
    std::string_view bad("a temporary string"s); // "bad" holds a dangling pointer

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/string/basic_string_view&oldid=109918"