The class template basic_string describes objects that can store a sequence consisting of a varying number of arbitrary char-like objects with the first element of the sequence at position zero. Such a sequence is also called a “string” if the type of the char-like objects that it holds is clear from context. In the rest of this Clause, the type of the char-like objects held in a basic_string object is designated by charT.
The member functions of basic_string use an object of the Allocator class passed as a template parameter to allocate and free storage for the contained char-like objects.225
In all cases, size() <= capacity().
The functions described in this Clause can report two kinds of errors, each associated with an exception type:
a length error is associated with exceptions of type length_error;
an out-of-range error is associated with exceptions of type out_of_range.
namespace std { template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>> class basic_string { public: using traits_type = traits; using value_type = charT; using allocator_type = Allocator; using size_type = typename allocator_traits<Allocator>::size_type; using difference_type = typename allocator_traits<Allocator>::difference_type; using pointer = typename allocator_traits<Allocator>::pointer; using const_pointer = typename allocator_traits<Allocator>::const_pointer; using reference = value_type&; using const_reference = const value_type&; using iterator = implementation-defined; using const_iterator = implementation-defined; using reverse_iterator = std::reverse_iterator<iterator>; using const_reverse_iterator = std::reverse_iterator<const_iterator>; static const size_type npos = -1; basic_string() noexcept(noexcept(Allocator())) : basic_string(Allocator()) { } explicit basic_string(const Allocator& a) noexcept; basic_string(const basic_string& str); basic_string(basic_string&& str) noexcept; basic_string(const basic_string& str, size_type pos, const Allocator& a = Allocator()); basic_string(const basic_string& str, size_type pos, size_type n, const Allocator& a = Allocator()); template<class T> basic_string(const T& t, size_type pos, size_type n, const Allocator& a = Allocator()); explicit basic_string(basic_string_view<charT, traits> sv, const Allocator& a = Allocator()); basic_string(const charT* s, size_type n, const Allocator& a = Allocator()); basic_string(const charT* s, const Allocator& a = Allocator()); basic_string(size_type n, charT c, const Allocator& a = Allocator()); template<class InputIterator> basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator()); basic_string(initializer_list<charT>, const Allocator& = Allocator()); basic_string(const basic_string&, const Allocator&); basic_string(basic_string&&, const Allocator&); ~basic_string(); basic_string& operator=(const basic_string& str); basic_string& operator=(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value); basic_string& operator=(basic_string_view<charT, traits> sv); basic_string& operator=(const charT* s); basic_string& operator=(charT c); basic_string& operator=(initializer_list<charT>); iterator begin() noexcept; const_iterator begin() const noexcept; iterator end() noexcept; const_iterator end() const noexcept; reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; const_iterator cbegin() const noexcept; const_iterator cend() const noexcept; const_reverse_iterator crbegin() const noexcept; const_reverse_iterator crend() const noexcept; size_type size() const noexcept; size_type length() const noexcept; size_type max_size() const noexcept; void resize(size_type n, charT c); void resize(size_type n); size_type capacity() const noexcept; void reserve(size_type res_arg = 0); void shrink_to_fit(); void clear() noexcept; bool empty() const noexcept; const_reference operator[](size_type pos) const; reference operator[](size_type pos); const_reference at(size_type n) const; reference at(size_type n); const charT& front() const; charT& front(); const charT& back() const; charT& back(); basic_string& operator+=(const basic_string& str); basic_string& operator+=(basic_string_view<charT, traits> sv); basic_string& operator+=(const charT* s); basic_string& operator+=(charT c); basic_string& operator+=(initializer_list<charT>); basic_string& append(const basic_string& str); basic_string& append(const basic_string& str, size_type pos, size_type n = npos); basic_string& append(basic_string_view<charT, traits> sv); template<class T> basic_string& append(const T& t, size_type pos, size_type n = npos); basic_string& append(const charT* s, size_type n); basic_string& append(const charT* s); basic_string& append(size_type n, charT c); template<class InputIterator> basic_string& append(InputIterator first, InputIterator last); basic_string& append(initializer_list<charT>); void push_back(charT c); basic_string& assign(const basic_string& str); basic_string& assign(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value); basic_string& assign(const basic_string& str, size_type pos, size_type n = npos); basic_string& assign(basic_string_view<charT, traits> sv); template<class T> basic_string& assign(const T& t, size_type pos, size_type n = npos); basic_string& assign(const charT* s, size_type n); basic_string& assign(const charT* s); basic_string& assign(size_type n, charT c); template<class InputIterator> basic_string& assign(InputIterator first, InputIterator last); basic_string& assign(initializer_list<charT>); basic_string& insert(size_type pos, const basic_string& str); basic_string& insert(size_type pos1, const basic_string& str, size_type pos2, size_type n = npos); basic_string& insert(size_type pos, basic_string_view<charT, traits> sv); template<class T> basic_string& insert(size_type pos1, const T& t, size_type pos2, size_type n = npos); basic_string& insert(size_type pos, const charT* s, size_type n); basic_string& insert(size_type pos, const charT* s); basic_string& insert(size_type pos, size_type n, charT c); iterator insert(const_iterator p, charT c); iterator insert(const_iterator p, size_type n, charT c); template<class InputIterator> iterator insert(const_iterator p, InputIterator first, InputIterator last); iterator insert(const_iterator p, initializer_list<charT>); basic_string& erase(size_type pos = 0, size_type n = npos); iterator erase(const_iterator p); iterator erase(const_iterator first, const_iterator last); void pop_back(); basic_string& replace(size_type pos1, size_type n1, const basic_string& str); basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos); basic_string& replace(size_type pos1, size_type n1, basic_string_view<charT, traits> sv); template<class T> basic_string& replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos); basic_string& replace(size_type pos, size_type n1, const charT* s, size_type n2); basic_string& replace(size_type pos, size_type n1, const charT* s); basic_string& replace(size_type pos, size_type n1, size_type n2, charT c); basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str); basic_string& replace(const_iterator i1, const_iterator i2, basic_string_view<charT, traits> sv); basic_string& replace(const_iterator i1, const_iterator i2, const charT* s, size_type n); basic_string& replace(const_iterator i1, const_iterator i2, const charT* s); basic_string& replace(const_iterator i1, const_iterator i2, size_type n, charT c); template<class InputIterator> basic_string& replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2); basic_string& replace(const_iterator, const_iterator, initializer_list<charT>); size_type copy(charT* s, size_type n, size_type pos = 0) const; void swap(basic_string& str) noexcept(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value); const charT* c_str() const noexcept; const charT* data() const noexcept; charT* data() noexcept; operator basic_string_view<charT, traits>() const noexcept; allocator_type get_allocator() const noexcept; size_type find (basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept; size_type find (const basic_string& str, size_type pos = 0) const noexcept; size_type find (const charT* s, size_type pos, size_type n) const; size_type find (const charT* s, size_type pos = 0) const; size_type find (charT c, size_type pos = 0) const; size_type rfind(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept; size_type rfind(const basic_string& str, size_type pos = npos) const noexcept; size_type rfind(const charT* s, size_type pos, size_type n) const; size_type rfind(const charT* s, size_type pos = npos) const; size_type rfind(charT c, size_type pos = npos) const; size_type find_first_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept; size_type find_first_of(const basic_string& str, size_type pos = 0) const noexcept; size_type find_first_of(const charT* s, size_type pos, size_type n) const; size_type find_first_of(const charT* s, size_type pos = 0) const; size_type find_first_of(charT c, size_type pos = 0) const; size_type find_last_of (basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept; size_type find_last_of (const basic_string& str, size_type pos = npos) const noexcept; size_type find_last_of (const charT* s, size_type pos, size_type n) const; size_type find_last_of (const charT* s, size_type pos = npos) const; size_type find_last_of (charT c, size_type pos = npos) const; size_type find_first_not_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept; size_type find_first_not_of(const basic_string& str, size_type pos = 0) const noexcept; size_type find_first_not_of(const charT* s, size_type pos, size_type n) const; size_type find_first_not_of(const charT* s, size_type pos = 0) const; size_type find_first_not_of(charT c, size_type pos = 0) const; size_type find_last_not_of (basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept; size_type find_last_not_of (const basic_string& str, size_type pos = npos) const noexcept; size_type find_last_not_of (const charT* s, size_type pos, size_type n) const; size_type find_last_not_of (const charT* s, size_type pos = npos) const; size_type find_last_not_of (charT c, size_type pos = npos) const; basic_string substr(size_type pos = 0, size_type n = npos) const; int compare(basic_string_view<charT, traits> sv) const noexcept; int compare(size_type pos1, size_type n1, basic_string_view<charT, traits> sv) const; template<class T> int compare(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos) const; int compare(const basic_string& str) const noexcept; int compare(size_type pos1, size_type n1, const basic_string& str) const; int compare(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos) const; int compare(const charT* s) const; int compare(size_type pos1, size_type n1, const charT* s) const; int compare(size_type pos1, size_type n1, const charT* s, size_type n2) const; }; template<class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>> basic_string(InputIterator, InputIterator, Allocator = Allocator()) -> basic_string<typename iterator_traits<InputIterator>::value_type, char_traits<typename iterator_traits<InputIterator>::value_type>, Allocator>; }24.3.2.1 basic_string general requirements [string.require]
If any operation would cause size() to exceed max_size(), that operation shall throw an exception object of type length_error.
If any member function or operator of basic_string throws an exception, that function or operator shall have no other effect.
In every specialization basic_string<charT, traits, Allocator>, the type allocator_traits<Allocator>::value_type shall name the same type as charT. Every object of type basic_string<charT, traits, Allocator> shall use an object of type Allocator to allocate and free storage for the contained charT objects as needed. The Allocator object used shall be obtained as described in [container.requirements.general]. In every specialization basic_string<charT, traits, Allocator>, the type traits shall satisfy the character traits requirements ([char.traits]), and the type traits::char_type shall name the same type as charT.
References, pointers, and iterators referring to the elements of a basic_string sequence may be invalidated by the following uses of that basic_string object:
as an argument to any standard library function taking a reference to non-const basic_string as an argument.226
Calling non-const member functions, except operator[], at, data, front, back, begin, rbegin, end, and rend.
explicit basic_string(const Allocator& a) noexcept;
Effects: Constructs an object of class basic_string. The postconditions of this function are indicated in Table 55.
Table
55—
basic_string(const Allocator&)effects
basic_string(const basic_string& str); basic_string(basic_string&& str) noexcept;
Effects: Constructs an object of class basic_string as indicated in Table 56. In the second form, str is left in a valid state with an unspecified value.
Table
56—
basic_string(const basic_string&)effects
basic_string(const basic_string& str, size_type pos, const Allocator& a = Allocator());
Throws: out_of_range if pos > str.size().
Effects: Constructs an object of class basic_string and determines the effective length rlen of the initial string value as str.size() - pos, as indicated in Table 57.
basic_string(const basic_string& str, size_type pos, size_type n, const Allocator& a = Allocator());
Throws: out_of_range if pos > str.size().
Effects: Constructs an object of class basic_string and determines the effective length rlen of the initial string value as the smaller of n and str.size() - pos, as indicated in Table 57.
Table
57—
basic_string(const basic_string&, size_type, const Allocator&)and
effects
template<class T> basic_string(const T& t, size_type pos, size_type n, const Allocator& a = Allocator());
Effects: Creates a variable, sv, as if by basic_string_view<charT, traits> sv = t; and then behaves the same as:
basic_string(sv.substr(pos, n), a);
Remarks: This constructor shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true.
explicit basic_string(basic_string_view<charT, traits> sv, const Allocator& a = Allocator());
Effects: Same as basic_string(sv.data(), sv.size(), a).
basic_string(const charT* s, size_type n, const Allocator& a = Allocator());
Requires: s points to an array of at least n elements of charT.
Effects: Constructs an object of class basic_string and determines its initial string value from the array of charT of length n whose first element is designated by s, as indicated in Table 58.
Table
58—
basic_string(const charT*, size_type, const Allocator&)effects
basic_string(const charT* s, const Allocator& a = Allocator());
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Constructs an object of class basic_string and determines its initial string value from the array of charT of length traits::length(s) whose first element is designated by s, as indicated in Table 59.
Table
59—
basic_string(const charT*, const Allocator&)effects
basic_string(size_type n, charT c, const Allocator& a = Allocator());
Effects: Constructs an object of class basic_string and determines its initial string value by repeating the char-like object c for all n elements, as indicated in Table 60.
Table
60—
basic_string(size_t, charT, const Allocator&)effects
template<class InputIterator> basic_string(InputIterator begin, InputIterator end, const Allocator& a = Allocator());
Effects: If InputIterator is an integral type, equivalent to:
basic_string(static_cast<size_type>(begin), static_cast<value_type>(end), a);
Otherwise constructs a string from the values in the range [begin, end), as indicated in the Sequence Requirements table (see [sequence.reqmts]).
basic_string(initializer_list<charT> il, const Allocator& a = Allocator());
Effects: Same as basic_string(il.begin(), il.end(), a).
basic_string(const basic_string& str, const Allocator& alloc); basic_string(basic_string&& str, const Allocator& alloc);
Effects: Constructs an object of class basic_string as indicated in Table 61. The stored allocator is constructed from alloc. In the second form, str is left in a valid state with an unspecified value.
Table
61—
basic_string(const basic_string&, const Allocator&)and
basic_string(basic_string&&, const Allocator&)effects
Throws: The second form throws nothing if alloc == str.get_allocator().
template<class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>> basic_string(InputIterator, InputIterator, Allocator = Allocator()) -> basic_string<typename iterator_traits<InputIterator>::value_type, char_traits<typename iterator_traits<InputIterator>::value_type>, Allocator>;
Remarks: Shall not participate in overload resolution if InputIterator is a type that does not qualify as an input iterator, or if Allocator is a type that does not qualify as an allocator ([container.requirements.general]).
basic_string& operator=(const basic_string& str);
Effects: If *this and str are not the same object, modifies *this as shown in Table 62.
If *this and str are the same object, the member has no effect.
Returns: *this.
Table
62—
operator=(const basic_string&)effects
basic_string& operator=(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);
Effects: Move assigns as a sequence container, except that iterators, pointers and references may be invalidated.
basic_string& operator=(basic_string_view<charT, traits> sv);
Effects: Equivalent to: return assign(sv);
basic_string& operator=(const charT* s);
Returns: *this = basic_string(s).
Remarks: Uses traits::length().
basic_string& operator=(charT c);
Returns: *this = basic_string(1, c).
basic_string& operator=(initializer_list<charT> il);
Effects: As if by: *this = basic_string(il);
24.3.2.3 basic_string iterator support [string.iterators]iterator begin() noexcept; const_iterator begin() const noexcept; const_iterator cbegin() const noexcept;
Returns: An iterator referring to the first character in the string.
iterator end() noexcept; const_iterator end() const noexcept; const_iterator cend() const noexcept;
Returns: An iterator which is the past-the-end value.
reverse_iterator rbegin() noexcept; const_reverse_iterator rbegin() const noexcept; const_reverse_iterator crbegin() const noexcept;
Returns: An iterator which is semantically equivalent to reverse_iterator(end()).
reverse_iterator rend() noexcept; const_reverse_iterator rend() const noexcept; const_reverse_iterator crend() const noexcept;
Returns: An iterator which is semantically equivalent to reverse_iterator(begin()).
24.3.2.4 basic_string capacity [string.capacity]size_type size() const noexcept;
Returns: A count of the number of char-like objects currently in the string.
Complexity: Constant time.
size_type length() const noexcept;
size_type max_size() const noexcept;
Returns: The largest possible number of char-like objects that can be stored in a basic_string.
Complexity: Constant time.
void resize(size_type n, charT c);
Throws: length_error if n > max_size().
Effects: Alters the length of the string designated by *this as follows:
If n <= size(), the function replaces the string designated by *this with a string of length n whose elements are a copy of the initial elements of the original string designated by *this.
If n > size(), the function replaces the string designated by *this with a string of length n whose first size() elements are a copy of the original string designated by *this, and whose remaining elements are all initialized to c.
void resize(size_type n);
Effects: As if by resize(n, charT()).
size_type capacity() const noexcept;
Returns: The size of the allocated storage in the string.
void reserve(size_type res_arg=0);
The member function reserve() is a directive that informs a basic_string object of a planned change in size, so that it can manage the storage allocation accordingly.
Effects: After reserve(), capacity() is greater or equal to the argument of reserve. [ Note: Calling reserve() with a res_arg argument less than capacity() is in effect a non-binding shrink request. A call with res_arg <= size() is in effect a non-binding shrink-to-fit request. — end note ]
Throws: length_error if res_arg > max_size().227
void shrink_to_fit();
Effects: shrink_to_fit is a non-binding request to reduce capacity() to size(). [ Note: The request is non-binding to allow latitude for implementation-specific optimizations. — end note ] It does not increase capacity(), but may reduce capacity() by causing reallocation.
Complexity: Linear in the size of the sequence.
Remarks: Reallocation invalidates all the references, pointers, and iterators referring to the elements in the sequence as well as the past-the-end iterator. If no reallocation happens, they remain valid.
void clear() noexcept;
Effects: Behaves as if the function calls:
erase(begin(), end());
bool empty() const noexcept;
const_reference operator[](size_type pos) const; reference operator[](size_type pos);
Returns: *(begin() + pos) if pos < size(). Otherwise, returns a reference to an object of type charT with value charT(), where modifying the object to any value other than charT() leads to undefined behavior.
Complexity: Constant time.
const_reference at(size_type pos) const; reference at(size_type pos);
Throws: out_of_range if pos >= size().
Returns: operator[](pos).
const charT& front() const; charT& front();
Effects: Equivalent to: return operator[](0);
const charT& back() const; charT& back();
Effects: Equivalent to: return operator[](size() - 1);
24.3.2.6 basic_string modifiers [string.modifiers] 24.3.2.6.1 basic_string::operator+= [string.op+=]basic_string& operator+=(const basic_string& str);
Effects: Calls append(str).
basic_string& operator+=(basic_string_view<charT, traits> sv);
Effects: Calls append(sv).
basic_string& operator+=(const charT* s);
Effects: Calls append(s).
basic_string& operator+=(charT c);
Effects: Calls push_back(c);
basic_string& operator+=(initializer_list<charT> il);
Effects: Calls append(il).
24.3.2.6.2 basic_string::append [string.append]basic_string& append(const basic_string& str);
Effects: Calls append(str.data(), str.size()).
basic_string& append(const basic_string& str, size_type pos, size_type n = npos);
Throws: out_of_range if pos > str.size().
Effects: Determines the effective length rlen of the string to append as the smaller of n and str.size() - pos and calls append(str.data() + pos, rlen).
basic_string& append(basic_string_view<charT, traits> sv);
Effects: Equivalent to: return append(sv.data(), sv.size());
template<class T> basic_string& append(const T& t, size_type pos, size_type n = npos);
Throws: out_of_range if pos > sv.size().
Effects: Creates a variable, sv, as if by basic_string_view<charT, traits> sv = t. Determines the effective length rlen of the string to append as the smaller of n and sv.size() - pos and calls append(sv.data() + pos, rlen).
Remarks: This function shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true and is_convertible_v<const T&, const charT*> is false.
basic_string& append(const charT* s, size_type n);
Requires: s points to an array of at least n elements of charT.
Throws: length_error if size() + n > max_size().
Effects: The function replaces the string controlled by *this with a string of length size() + n whose first size() elements are a copy of the original string controlled by *this and whose remaining elements are a copy of the initial n elements of s.
basic_string& append(const charT* s);
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Calls append(s, traits::length(s)).
basic_string& append(size_type n, charT c);
Effects: Equivalent to append(basic_string(n, c)).
template<class InputIterator> basic_string& append(InputIterator first, InputIterator last);
Requires: [first, last) is a valid range.
Effects: Equivalent to append(basic_string(first, last, get_allocator())).
basic_string& append(initializer_list<charT> il);
Effects: Calls append(il.begin(), il.size()).
void push_back(charT c);
Effects: Equivalent to append(static_cast<size_type>(1), c).
24.3.2.6.3 basic_string::assign [string.assign]basic_string& assign(const basic_string& str);
Effects: Equivalent to *this = str.
basic_string& assign(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);
Effects: Equivalent to *this = std::move(str).
basic_string& assign(const basic_string& str, size_type pos, size_type n = npos);
Throws: out_of_range if pos > str.size().
Effects: Determines the effective length rlen of the string to assign as the smaller of n and str.size() - pos and calls assign(str.data() + pos, rlen).
basic_string& assign(basic_string_view<charT, traits> sv);
Effects: Equivalent to: return assign(sv.data(), sv.size());
template<class T> basic_string& assign(const T& t, size_type pos, size_type n = npos);
Throws: out_of_range if pos > sv.size().
Effects: Creates a variable, sv, as if by basic_string_view<charT, traits> sv = t. Determines the effective length rlen of the string to assign as the smaller of n and sv.size() - pos and calls assign(sv.data() + pos, rlen).
Remarks: This function shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true and is_convertible_v<const T&, const charT*> is false.
basic_string& assign(const charT* s, size_type n);
Requires: s points to an array of at least n elements of charT.
Throws: length_error if n > max_size().
Effects: Replaces the string controlled by *this with a string of length n whose elements are a copy of those pointed to by s.
basic_string& assign(const charT* s);
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Calls assign(s, traits::length(s)).
basic_string& assign(initializer_list<charT> il);
Effects: Calls assign(il.begin(), il.size()).
basic_string& assign(size_type n, charT c);
Effects: Equivalent to assign(basic_string(n, c)).
template<class InputIterator> basic_string& assign(InputIterator first, InputIterator last);
Effects: Equivalent to assign(basic_string(first, last, get_allocator())).
24.3.2.6.4 basic_string::insert [string.insert]basic_string& insert(size_type pos, const basic_string& str);
Effects: Equivalent to: return insert(pos, str.data(), str.size());
basic_string& insert(size_type pos1, const basic_string& str, size_type pos2, size_type n = npos);
Throws: out_of_range if pos1 > size() or pos2 > str.size().
Effects: Determines the effective length rlen of the string to insert as the smaller of n and str.size() - pos2 and calls insert(pos1, str.data() + pos2, rlen).
basic_string& insert(size_type pos, basic_string_view<charT, traits> sv);
Effects: Equivalent to: return insert(pos, sv.data(), sv.size());
template<class T> basic_string& insert(size_type pos1, const T& t, size_type pos2, size_type n = npos);
Throws: out_of_range if pos1 > size() or pos2 > sv.size().
Effects: Creates a variable, sv, as if by basic_string_view<charT, traits> sv = t. Determines the effective length rlen of the string to assign as the smaller of n and sv.size() - pos2 and calls insert(pos1, sv.data() + pos2, rlen).
Remarks: This function shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true and is_convertible_v<const T&, const charT*> is false.
basic_string& insert(size_type pos, const charT* s, size_type n);
Requires: s points to an array of at least n elements of charT.
Throws: out_of_range if pos > size() or length_error if size() + n > max_size().
Effects: Replaces the string controlled by *this with a string of length size() + n whose first pos elements are a copy of the initial elements of the original string controlled by *this and whose next n elements are a copy of the elements in s and whose remaining elements are a copy of the remaining elements of the original string controlled by *this.
basic_string& insert(size_type pos, const charT* s);
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Equivalent to: return insert(pos, s, traits::length(s));
basic_string& insert(size_type pos, size_type n, charT c);
Effects: Equivalent to insert(pos, basic_string(n, c)).
iterator insert(const_iterator p, charT c);
Requires: p is a valid iterator on *this.
Effects: Inserts a copy of c before the character referred to by p.
Returns: An iterator which refers to the copy of the inserted character.
iterator insert(const_iterator p, size_type n, charT c);
Requires: p is a valid iterator on *this.
Effects: Inserts n copies of c before the character referred to by p.
Returns: An iterator which refers to the copy of the first inserted character, or p if n == 0.
template<class InputIterator> iterator insert(const_iterator p, InputIterator first, InputIterator last);
Requires: p is a valid iterator on *this. [first, last) is a valid range.
Effects: Equivalent to insert(p - begin(), basic_string(first, last, get_allocator())).
Returns: An iterator which refers to the copy of the first inserted character, or p if first == last.
iterator insert(const_iterator p, initializer_list<charT> il);
Effects: As if by insert(p, il.begin(), il.end()).
Returns: An iterator which refers to the copy of the first inserted character, or p if i1 is empty.
24.3.2.6.5 basic_string::erase [string.erase]basic_string& erase(size_type pos = 0, size_type n = npos);
Throws: out_of_range if pos > size().
Effects: Determines the effective length xlen of the string to be removed as the smaller of n and size() - pos.
The function then replaces the string controlled by *this with a string of length size() - xlen whose first pos elements are a copy of the initial elements of the original string controlled by *this, and whose remaining elements are a copy of the elements of the original string controlled by *this beginning at position pos + xlen.
iterator erase(const_iterator p);
Effects: Removes the character referred to by p.
Returns: An iterator which points to the element immediately following p prior to the element being erased. If no such element exists, end() is returned.
iterator erase(const_iterator first, const_iterator last);
Requires: first and last are valid iterators on *this, defining a range [first, last).
Effects: Removes the characters in the range [first, last).
Returns: An iterator which points to the element pointed to by last prior to the other elements being erased. If no such element exists, end() is returned.
void pop_back();
Effects: Equivalent to erase(size() - 1, 1).
24.3.2.6.6 basic_string::replace [string.replace]basic_string& replace(size_type pos1, size_type n1, const basic_string& str);
Effects: Equivalent to: return replace(pos1, n1, str.data(), str.size());
basic_string& replace(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos);
Throws: out_of_range if pos1 > size() or pos2 > str.size().
Effects: Determines the effective length rlen of the string to be inserted as the smaller of n2 and str.size() - pos2 and calls replace(pos1, n1, str.data() + pos2, rlen).
basic_string& replace(size_type pos1, size_type n1, basic_string_view<charT, traits> sv);
Effects: Equivalent to: return replace(pos1, n1, sv.data(), sv.size());
template<class T> basic_string& replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos);
Throws: out_of_range if pos1 > size() or pos2 > sv.size().
Effects: Creates a variable, sv, as if by basic_string_view<charT, traits> sv = t. Determines the effective length rlen of the string to be inserted as the smaller of n2 and sv.size() - pos2 and calls replace(pos1, n1, sv.data() + pos2, rlen).
Remarks: This function shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true and is_convertible_v<const T&, const charT*> is false.
basic_string& replace(size_type pos1, size_type n1, const charT* s, size_type n2);
Requires: s points to an array of at least n2 elements of charT.
Throws: out_of_range if pos1 > size() or length_error if the length of the resulting string would exceed max_size() (see below).
Effects: Determines the effective length xlen of the string to be removed as the smaller of n1 and size() - pos1. If size() - xlen >= max_size() - n2 throws length_error. Otherwise, the function replaces the string controlled by *this with a string of length size() - xlen + n2 whose first pos1 elements are a copy of the initial elements of the original string controlled by *this, whose next n2 elements are a copy of the initial n2 elements of s, and whose remaining elements are a copy of the elements of the original string controlled by *this beginning at position pos + xlen.
basic_string& replace(size_type pos, size_type n, const charT* s);
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Equivalent to: return replace(pos, n, s, traits::length(s));
basic_string& replace(size_type pos1, size_type n1, size_type n2, charT c);
Effects: Equivalent to replace(pos1, n1, basic_string(n2, c)).
basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str);
Requires: [begin(), i1) and [i1, i2) are valid ranges.
Effects: Calls replace(i1 - begin(), i2 - i1, str).
basic_string& replace(const_iterator i1, const_iterator i2, basic_string_view<charT, traits> sv);
Requires: [begin(), i1) and [i1, i2) are valid ranges.
Effects: Calls replace(i1 - begin(), i2 - i1, sv).
basic_string& replace(const_iterator i1, const_iterator i2, const charT* s, size_type n);
Requires: [begin(), i1) and [i1, i2) are valid ranges and s points to an array of at least n elements of charT.
Effects: Calls replace(i1 - begin(), i2 - i1, s, n).
basic_string& replace(const_iterator i1, const_iterator i2, const charT* s);
Requires: [begin(), i1) and [i1, i2) are valid ranges and s points to an array of at least traits::length(s) + 1 elements of charT.
Effects: Calls replace(i1 - begin(), i2 - i1, s, traits::length(s)).
basic_string& replace(const_iterator i1, const_iterator i2, size_type n, charT c);
Requires: [begin(), i1) and [i1, i2) are valid ranges.
Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(n, c)).
template<class InputIterator> basic_string& replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2);
Requires: [begin(), i1), [i1, i2) and [j1, j2) are valid ranges.
Effects: Calls replace(i1 - begin(), i2 - i1, basic_string(j1, j2, get_allocator())).
basic_string& replace(const_iterator i1, const_iterator i2, initializer_list<charT> il);
Requires: [begin(), i1) and [i1, i2) are valid ranges.
Effects: Calls replace(i1 - begin(), i2 - i1, il.begin(), il.size()).
24.3.2.6.7 basic_string::copy [string.copy]size_type copy(charT* s, size_type n, size_type pos = 0) const;
Let rlen be the smaller of n and size() - pos.
Throws: out_of_range if pos > size().
Requires: [s, s + rlen) is a valid range.
Effects: Equivalent to: traits::copy(s, data() + pos, rlen). [ Note: This does not terminate s with a null object. — end note ]
24.3.2.6.8 basic_string::swap [string.swap]void swap(basic_string& s) noexcept(allocator_traits<Allocator>::propagate_on_container_swap::value || allocator_traits<Allocator>::is_always_equal::value);
Postconditions: *this contains the same sequence of characters that was in s, s contains the same sequence of characters that was in *this.
Complexity: Constant time.
24.3.2.7 basic_string string operations [string.ops] 24.3.2.7.1 basic_string accessors [string.accessors]const charT* c_str() const noexcept; const charT* data() const noexcept;
Returns: A pointer p such that p + i == &operator[](i) for each i in [0, size()].
Complexity: Constant time.
Requires: The program shall not alter any of the values stored in the character array.
charT* data() noexcept;
Returns: A pointer p such that p + i == &operator[](i) for each i in [0, size()].
Complexity: Constant time.
Requires: The program shall not alter the value stored at p + size().
operator basic_string_view<charT, traits>() const noexcept;
Effects: Equivalent to: return basic_string_view<charT, traits>(data(), size());
allocator_type get_allocator() const noexcept;
Returns: A copy of the Allocator object used to construct the string or, if that allocator has been replaced, a copy of the most recent replacement.
24.3.2.7.2 basic_string::find [string.find]size_type find(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
Effects: Determines the lowest position xpos, if possible, such that both of the following conditions hold:
pos <= xpos and xpos + sv.size() <= size();
traits::eq(at(xpos + I), sv.at(I)) for all elements I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find(const basic_string& str, size_type pos = 0) const noexcept;
Effects: Equivalent to: return find(basic_string_view<charT, traits>(str), pos);
size_type find(const charT* s, size_type pos, size_type n) const;
Returns: find(basic_string_view<charT, traits>(s, n), pos).
size_type find(const charT* s, size_type pos = 0) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: find(basic_string_view<charT, traits>(s), pos).
size_type find(charT c, size_type pos = 0) const;
Returns: find(basic_string(1, c), pos).
24.3.2.7.3 basic_string::rfind [string.rfind]size_type rfind(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
Effects: Determines the highest position xpos, if possible, such that both of the following conditions hold:
xpos <= pos and xpos + sv.size() <= size();
traits::eq(at(xpos + I), sv.at(I)) for all elements I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type rfind(const basic_string& str, size_type pos = npos) const noexcept;
Effects: Equivalent to: return rfind(basic_string_view<charT, traits>(str), pos);
size_type rfind(const charT* s, size_type pos, size_type n) const;
Returns: rfind(basic_string_view<charT, traits>(s, n), pos).
size_type rfind(const charT* s, size_type pos = npos) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: rfind(basic_string_view<charT, traits>(s), pos).
size_type rfind(charT c, size_type pos = npos) const;
Returns: rfind(basic_string(1, c), pos).
24.3.2.7.4 basic_string::find_first_of [string.find.first.of]size_type find_first_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
Effects: Determines the lowest position xpos, if possible, such that both of the following conditions hold:
pos <= xpos and xpos < size();
traits::eq(at(xpos), sv.at(I)) for some element I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find_first_of(const basic_string& str, size_type pos = 0) const noexcept;
Effects: Equivalent to: return find_first_of(basic_string_view<charT, traits>(str), pos);
size_type find_first_of(const charT* s, size_type pos, size_type n) const;
Returns: find_first_of(basic_string_view<charT, traits>(s, n), pos).
size_type find_first_of(const charT* s, size_type pos = 0) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: find_first_of(basic_string_view<charT, traits>(s), pos).
size_type find_first_of(charT c, size_type pos = 0) const;
Returns: find_first_of(basic_string(1, c), pos).
24.3.2.7.5 basic_string::find_last_of [string.find.last.of]size_type find_last_of(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
Effects: Determines the highest position xpos, if possible, such that both of the following conditions hold:
xpos <= pos and xpos < size();
traits::eq(at(xpos), sv.at(I)) for some element I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find_last_of(const basic_string& str, size_type pos = npos) const noexcept;
Effects: Equivalent to: return find_last_of(basic_string_view<charT, traits>(str), pos);
size_type find_last_of(const charT* s, size_type pos, size_type n) const;
Returns: find_last_of(basic_string_view<charT, traits>(s, n), pos).
size_type find_last_of(const charT* s, size_type pos = npos) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: find_last_of(basic_string_view<charT, traits>(s), pos).
size_type find_last_of(charT c, size_type pos = npos) const;
Returns: find_last_of(basic_string(1, c), pos).
24.3.2.7.6 basic_string::find_first_not_of [string.find.first.not.of]size_type find_first_not_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
Effects: Determines the lowest position xpos, if possible, such that both of the following conditions hold:
pos <= xpos and xpos < size();
traits::eq(at(xpos), sv.at(I)) for no element I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find_first_not_of(const basic_string& str, size_type pos = 0) const noexcept;
Effects: Equivalent to:
return find_first_not_of(basic_string_view<charT, traits>(str), pos);
size_type find_first_not_of(const charT* s, size_type pos, size_type n) const;
Returns: find_first_not_of(basic_string_view<charT, traits>(s, n), pos).
size_type find_first_not_of(const charT* s, size_type pos = 0) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: find_first_not_of(basic_string_view<charT, traits>(s), pos).
size_type find_first_not_of(charT c, size_type pos = 0) const;
Returns: find_first_not_of(basic_string(1, c), pos).
24.3.2.7.7 basic_string::find_last_not_of [string.find.last.not.of]size_type find_last_not_of(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
Effects: Determines the highest position xpos, if possible, such that both of the following conditions hold:
xpos <= pos and xpos < size();
traits::eq(at(xpos), sv.at(I)) for no element I of the data referenced by sv.
Returns: xpos if the function can determine such a value for xpos. Otherwise, returns npos.
size_type find_last_not_of(const basic_string& str, size_type pos = npos) const noexcept;
Effects: Equivalent to:
return find_last_not_of(basic_string_view<charT, traits>(str), pos);
size_type find_last_not_of(const charT* s, size_type pos, size_type n) const;
Returns: find_last_not_of(basic_string_view<charT, traits>(s, n), pos).
size_type find_last_not_of(const charT* s, size_type pos = npos) const;
Requires: s points to an array of at least traits::length(s) + 1 elements of charT.
Returns: find_last_not_of(basic_string_view<charT, traits>(s), pos).
size_type find_last_not_of(charT c, size_type pos = npos) const;
Returns: find_last_not_of(basic_string(1, c), pos).
24.3.2.7.8 basic_string::substr [string.substr]basic_string substr(size_type pos = 0, size_type n = npos) const;
Throws: out_of_range if pos > size().
Effects: Determines the effective length rlen of the string to copy as the smaller of n and size() - pos.
Returns: basic_string(data()+pos, rlen).
24.3.2.7.9 basic_string::compare [string.compare]int compare(basic_string_view<charT, traits> sv) const noexcept;
Effects: Determines the effective length rlen of the strings to compare as the smaller of size() and sv.size(). The function then compares the two strings by calling traits::compare(data(), sv.data(), rlen).
Returns: The nonzero result if the result of the comparison is nonzero. Otherwise, returns a value as indicated in Table 63.
Table
63—
compare()results
int compare(size_type pos1, size_type n1, basic_string_view<charT, traits> sv) const;
Effects: Equivalent to:
return basic_string_view<charT, traits>(data(), size()).substr(pos1, n1).compare(sv);
template<class T> int compare(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos) const;
Effects: Equivalent to:
basic_string_view<charT, traits> sv = t; return basic_string_view<charT, traits>( data(), size()).substr(pos1, n1).compare(sv.substr(pos2, n2));
Remarks: This function shall not participate in overload resolution unless is_convertible_v<const T&, basic_string_view<charT, traits>> is true and is_convertible_v<const T&, const charT*> is false.
int compare(const basic_string& str) const noexcept;
Effects: Equivalent to: return compare(basic_string_view<charT, traits>(str));
int compare(size_type pos1, size_type n1, const basic_string& str) const;
Effects: Equivalent to: return compare(pos1, n1, basic_string_view<charT, traits>(str));
int compare(size_type pos1, size_type n1, const basic_string& str, size_type pos2, size_type n2 = npos) const;
Effects: Equivalent to:
return compare(pos1, n1, basic_string_view<charT, traits>(str), pos2, n2);
int compare(const charT* s) const;
Returns: compare(basic_string(s)).
int compare(size_type pos, size_type n1, const charT* s) const;
Returns: basic_string(*this, pos, n1).compare(basic_string(s)).
int compare(size_type pos, size_type n1, const charT* s, size_type n2) const;
Returns: basic_string(*this, pos, n1).compare(basic_string(s, n2)).
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4