24 Strings library [strings]

24.3 String classes [string.classes]

24.3.2 Class template basic_­string [basic.string]

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: Звонки append(str).

Returns: *this.

basic_string& operator+=(basic_string_view<charT, traits> sv);

Effects: Звонки append(sv).

Returns: *this.

basic_string& operator+=(const charT* s);

Effects: Звонки append(s).

Returns: *this.

basic_string& operator+=(charT c);

Effects: Звонки push_­back(c);

Returns: *this.

basic_string& operator+=(initializer_list<charT> il);

Effects: Звонки append(il).

Returns: *this.

24.3.2.6.2 basic_­string​::​append [string.append]

basic_string& append(const basic_string& str);

Effects: Звонки append(str.data(), str.size()).

Returns: *this.

basic_string& append(const basic_string& str, size_type pos, size_type n = npos);

Throws: out_­of_­range если pos > str.size().

Effects: Определяет эффективную длину rlen добавляемой строки как меньшее из вызовов n и str.size() - pos и append(str.data() + pos, rlen).

Returns: *this.

basic_string& append(basic_string_view<charT, traits> sv);

Effects: Эквивалентен: 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 если pos > sv.size().

Effects: Создает переменную sv, как будто by basic_­string_­view<charT, traits> sv = t. Определяет эффективную длину rlen добавляемой строки как меньшее из вызовов n и sv.size() - posи append(sv.data() + pos, rlen).

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­convertible_­v<const T&, basic_­string_­view<charT, traits>> не true и is_­convertible_­v<const T&, const charT*> является false.

Returns: *this.

basic_string& append(const charT* s, size_type n);

Requires: s указывает на массив, состоящий как минимум из n элементов charT.

Throws: length_­error если size() + n > max_­size().

Effects: Функция заменяет строку, которой управляет, *this строкой длины size() + n , первые size() элементы которой являются копией исходной строки, которой управляет, *this а остальные элементы - копией начальных n элементов s.

Returns: *this.

basic_string& append(const charT* s);

Requires: s указывает на массив, состоящий как минимум из traits​::​length(s) + 1 элементов charT.

Effects: Звонки append(s, traits​::​length(s)).

Returns: *this.

basic_string& append(size_type n, charT c);

Effects: Эквивалентно append(basic_­string(n, c)).

Returns: *this.

template<class InputIterator> basic_string& append(InputIterator first, InputIterator last);

Requires: [first, last) допустимый диапазон.

Effects: Эквивалентно append(basic_­string(first, last, get_­allocator())).

Returns: *this.

basic_string& append(initializer_list<charT> il);

Effects: Звонки append(il.begin(), il.size()).

Returns: *this.

void push_back(charT c);

Effects: Эквивалентно 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: Эквивалентно *this = str.

Returns: *this.

basic_string& assign(basic_string&& str) noexcept(allocator_traits<Allocator>::propagate_on_container_move_assignment::value || allocator_traits<Allocator>::is_always_equal::value);

Effects: Эквивалентно *this = std​::​move(str).

Returns: *this.

basic_string& assign(const basic_string& str, size_type pos, size_type n = npos);

Throws: out_­of_­range если pos > str.size().

Effects: Определяет эффективную длину rlen строки, которая назначается как меньшее из вызовов n и str.size() - pos и assign(str.data() + pos, rlen).

Returns: *this.

basic_string& assign(basic_string_view<charT, traits> sv);

Effects: Эквивалентен: 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 если pos > sv.size().

Effects: Создает переменную sv, как будто by basic_­string_­view<charT, traits> sv = t. Определяет эффективную длину rlen строки, которая назначается как меньшее из вызовов n и sv.size() - posи assign(sv.data() + pos, rlen).

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­convertible_­v<const T&, basic_­string_­view<charT, traits>> не true и is_­convertible_­v<const T&, const charT*> является false.

Returns: *this.

basic_string& assign(const charT* s, size_type n);

Requires: s указывает на массив, состоящий как минимум из n элементов charT.

Throws: length_­error если n > max_­size().

Effects: Заменяет строку, управляемую *this с помощью, строкой длины n , элементы которой являются копией тех, на которые указывает s.

Returns: *this.

basic_string& assign(const charT* s);

Requires: s указывает на массив, состоящий как минимум из traits​::​length(s) + 1 элементов charT.

Effects: Звонки assign(s, traits​::​length(s)).

Returns: *this.

basic_string& assign(initializer_list<charT> il);

Effects: Звонки assign(il.begin(), il.size()).

*this.

basic_string& assign(size_type n, charT c);

Effects: Эквивалентно assign(basic_­string(n, c)).

Returns: *this.

template<class InputIterator> basic_string& assign(InputIterator first, InputIterator last);

Effects: Эквивалентно assign(basic_­string(first, last, get_­allocator())).

Returns: *this.

24.3.2.6.4 basic_­string​::​insert [string.insert]

basic_string& insert(size_type pos, const basic_string& str);

Effects: Эквивалентен: 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 если pos1 > size() или pos2 > str.size().

Effects: Определяет эффективную длину rlen строки для вставки в качестве меньшего из вызовов n и str.size() - pos2 и insert(pos1, str.data() + pos2, rlen).

Returns: *this.

basic_string& insert(size_type pos, basic_string_view<charT, traits> sv);

Effects: Эквивалентен: 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 если pos1 > size() или pos2 > sv.size().

Effects: Создает переменную sv, как будто by basic_­string_­view<charT, traits> sv = t. Определяет эффективную длину rlen строки, которая назначается как меньшее из вызовов n и sv.size() - pos2и insert(pos1, sv.data() + pos2, rlen).

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­convertible_­v<const T&, basic_­string_­view<charT, traits>> не true и is_­convertible_­v<const T&, const charT*> является false.

Returns: *this.

basic_string& insert(size_type pos, const charT* s, size_type n);

Requires: s указывает на массив, состоящий как минимум из n элементов charT.

Throws: out_­of_­range если pos > size() или length_­error если size() + n > max_­size().

Effects: Заменяет строку, управляемую *this строкой длины size() + n , первые pos элементы которой являются копией начальных элементов исходной строки, которой управляет, *this и чьи следующие n элементы являются копией элементов в, s а остальные элементы являются копией остальных элементов исходная строка, управляемая *this.

Returns: *this.

basic_string& insert(size_type pos, const charT* s);

Requires: s указывает на массив, состоящий как минимум из traits​::​length(s) + 1 элементов charT.

Effects: Эквивалентен: return insert(pos, s, traits​::​length(s));

basic_string& insert(size_type pos, size_type n, charT c);

Effects: Эквивалентно insert(pos, basic_­string(n, c)).

Returns: *this.

iterator insert(const_iterator p, charT c);

Requires: p является допустимым итератором на *this.

Effects: Вставляет копию c перед символом, на который ссылается p.

Returns: Итератор, который ссылается на копию вставленного символа.

iterator insert(const_iterator p, size_type n, charT c);

Requires: p является допустимым итератором на *this.

Effects: Вставляет n копии c перед символом, на который ссылается p.

Returns: Итератор, который ссылается на копию первого вставленного символа, или p если n == 0.

template<class InputIterator> iterator insert(const_iterator p, InputIterator first, InputIterator last);

Requires: p является допустимым итератором на *this. [first, last) допустимый диапазон.

Effects: Эквивалентно insert(p - begin(), basic_­string(first, last, get_­allocator())).

Returns: Итератор, который ссылается на копию первого вставленного символа, или p если first == last.

iterator insert(const_iterator p, initializer_list<charT> il);

Effects: Как будто мимо insert(p, il.begin(), il.end()).

Returns: Итератор, который ссылается на копию первого вставленного символа или p если i1 он пуст.

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 если pos > size().

Effects: Определяет эффективную длину xlen удаляемой строки как меньшее из значений n и size() - pos.

Затем функция заменяет строку, управляемую *this с помощью строки длины size() - xlen , первые pos элементы которой являются копией начальных элементов исходной строки, которой управляет *this, а остальные элементы которой являются копией элементов исходной строки, управляемой *this начиная с позиции pos + xlen.

Returns: *this.

iterator erase(const_iterator p);

Throws: Ничего такого.

Effects: Удаляет символ, на который ссылается p.

Returns: Итератор, который указывает на элемент, следующий непосредственно за p стираемым элементом. Если такого элемента не существует, end() возвращается.

iterator erase(const_iterator first, const_iterator last);

Requires: first и last являются действительными итераторами *this, определяющими диапазон [first, last).

Throws: Ничего такого.

Effects: Удаляет символы в диапазоне [first, last).

Returns: Итератор, который указывает на элемент, на который указывает до last удаления других элементов. Если такого элемента не существует, end() возвращается.

void pop_back();

Requires: !empty().

Throws: Ничего такого.

Effects: Эквивалентно 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: Эквивалентен: 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 если pos1 > size() или pos2 > str.size().

Effects: Определяет эффективную длину rlen вставляемой строки как меньшее из вызовов n2 и str.size() - pos2 и replace(pos1, n1, str.data() + pos2, rlen).

Returns: *this.

basic_string& replace(size_type pos1, size_type n1, basic_string_view<charT, traits> sv);

Effects: Эквивалентен: 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 если pos1 > size() или pos2 > sv.size().

Effects: Создает переменную sv, как будто by basic_­string_­view<charT, traits> sv = t. Определяет эффективную длину rlen вставляемой строки как меньшее из вызовов n2 и sv.size() - pos2и replace(pos1, n1, sv.data() + pos2, rlen).

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­convertible_­v<const T&, basic_­string_­view<charT, traits>> не true и is_­convertible_­v<const T&, const charT*> является false.

Returns: *this.

basic_string& replace(size_type pos1, size_type n1, const charT* s, size_type n2);

Requires: s указывает на массив, состоящий как минимум из n2 элементов charT.

Throws: out_­of_­range если pos1 > size() или length_­error если длина результирующей строки превысит max_­size() (см. ниже).

Effects: Определяет эффективную длину xlen удаляемой строки как меньшее из значений n1 и size() - pos1. Если size() - xlen >= max_­size() - n2 кидает length_­error. В противном случае функция заменяет строку, управляемую символом *,this строкой длины size() - xlen + n2 , первые pos1 элементы которой являются копией начальных элементов исходной строки *this, которой управляет , чьи следующие n2 элементы являются копией начальных n2 элементов s, а остальные элементы - копия элементов исходной строки, управляемая *this начиная с позиции pos + xlen.

Returns: *this.

basic_string& replace(size_type pos, size_type n, const charT* s);

Requires: s указывает на массив, состоящий как минимум из traits​::​length(s) + 1 элементов charT.

Effects: Эквивалентен: return replace(pos, n, s, traits​::​length(s));

basic_string& replace(size_type pos1, size_type n1, size_type n2, charT c);

Effects: Эквивалентно replace(pos1, n1, basic_­string(n2, c)).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str);

Requires: [begin(), i1) и [i1, i2) допустимые диапазоны.

Effects: Звонки replace(i1 - begin(), i2 - i1, str).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, basic_string_view<charT, traits> sv);

Requires: [begin(), i1) и [i1, i2) допустимые диапазоны.

Effects: Звонки replace(i1 - begin(), i2 - i1, sv).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, const charT* s, size_type n);

Requires: [begin(), i1) и [i1, i2) являются допустимыми диапазонами и s указывают на массив, состоящий как минимум из n элементов charT.

Effects: Звонки replace(i1 - begin(), i2 - i1, s, n).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, const charT* s);

Requires: [begin(), i1) и [i1, i2) являются допустимыми диапазонами и s указывают на массив, состоящий как минимум из traits​::​​length(s) + 1 элементов charT.

Effects: Звонки replace(i1 - begin(), i2 - i1, s, traits​::​length(s)).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, size_type n, charT c);

Requires: [begin(), i1) и [i1, i2) допустимые диапазоны.

Effects: Звонки replace(i1 - begin(), i2 - i1, basic_­string(n, c)).

Returns: *this.

template<class InputIterator> basic_string& replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2);

Requires: [begin(), i1), [i1, i2) и [j1, j2) допустимые диапазоны.

Effects: Звонки replace(i1 - begin(), i2 - i1, basic_­string(j1, j2, get_­allocator())).

Returns: *this.

basic_string& replace(const_iterator i1, const_iterator i2, initializer_list<charT> il);

Requires: [begin(), i1) и [i1, i2) допустимые диапазоны.

Effects: Звонки replace(i1 - begin(), i2 - i1, il.begin(), il.size()).

Returns: *this.

24.3.2.6.7 basic_­string​::​copy [string.copy]

size_type copy(charT* s, size_type n, size_type pos = 0) const;

Позвольте rlen быть меньшим из n и size() - pos.

Throws: out_­of_­range если pos > size().

Requires: [s, s + rlen) допустимый диапазон.

Effects: Эквивалент: traits​::​copy(s, data() + pos, rlen). [ Note: Это не заканчивается s нулевым объектом. ] end note

Returns: rlen.

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 содержит ту же последовательность символов, которая была в s, s содержит ту же последовательность символов, что была в *this.

Throws: Ничего такого.

Complexity: Постоянное время.