std::basic_string<CharT,Traits,Allocator>::append
basic_string& append( size_type count, CharT ch );
|
(1) | (constexpr начиная с C++20) |
basic_string& append( const CharT* s, size_type count );
|
(2) | (constexpr начиная с C++20) |
basic_string& append( const CharT* s );
|
(3) | (constexpr начиная с C++20) |
template< class SV >
basic_string& append( const SV& t );
|
(4) | (начиная с C++17) (constexpr начиная с C++20) |
template< class SV >
basic_string& append( const SV& t, size_type pos,
size_type count = npos );
|
(5) | (начиная с C++17) (constexpr начиная с C++20) |
basic_string& append( const basic_string& str );
|
(6) | (constexpr начиная с C++20) |
basic_string& append( const basic_string& str,
size_type pos, size_type count );
|
(7) | (до C++14) |
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
|
(начиная с C++14) (constexpr начиная с C++20) |
|
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
|
(8) | (constexpr начиная с C++20) |
basic_string& append( std::initializer_list<CharT> ilist );
|
(9) | (начиная с C++11) (constexpr начиная с C++20) |
Добавляет дополнительные символы в строку.
count копий символа ch.[s, s + count).[s, s + count) не является допустимым диапазоном, поведение не определено.return append(s, Traits::length(s));.sv, созданного из t.
- Если указан только
t, все символы изsvдобавляются. - Если также указан
pos:- Если
countравенnpos, все символы изsvначиная сposдобавляются. - В противном случае добавляется
std::min(count, sv.size() - pos)символов изsvначиная сpos.
- Если
std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>>являетсяtrue.std::is_convertible_v<const SV&, const CharT*>являетсяfalse.
std::basic_string_view<CharT, Traits> sv = t;return append(sv.data(), sv.size());.std::basic_string_view<CharT, Traits> sv = t;return append(sv.substr(pos, count));.str.
- Если указан только
str, все символы в ней добавляются. - Если также указан
pos:- Если
countравенnpos, все символы изstrначиная сposдобавляются. - В противном случае добавляется
std::min(count, str.size() - pos)символов изstrначиная сpos.
- Если
return append(str.data(), str.size());.|
7) Эквивалентно
return append(std::basic_string_view<CharT, Traits>(str).substr(pos, count));. |
(начиная с C++20) |
return append(basic_string(first, last, get_allocator()));.
|
Эта перегрузка имеет тот же эффект, что и перегрузка (1), если |
(до C++11) |
|
Эта перегрузка участвует в разрешении перегрузки только если |
(начиная с C++11) |
return append(ilist.begin(), ilist.size());.Параметры
| count | - | количество символов для добавления |
| ch | - | значение символа для добавления |
| s | - | указатель на строку символов для добавления |
| t | - | объект, конвертируемый в std::basic_string_view с символами для добавления |
| pos | - | индекс первого символа для добавления |
| str | - | строка для добавления |
| first, last | - | диапазон символов для добавления |
| ilist | - | список инициализации с символами для добавления |
Возвращаемое значение
* this
Сложность
Стандартных гарантий сложности не предусмотрено, типичные реализации ведут себя аналогично std::vector::insert() .
Исключения
Если операция приведёт к тому, что
size()
превысит
max_size()
, выбрасывается
std::length_error
.
Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).
Пример
#include <cassert> #include <string> int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) Добавить символ 3 раза. // Примечание: Это единственная перегрузка, принимающая символы “CharT”. result.append(3, '*'); assert(result == "***"); // 2) Добавить C-строку фиксированной длины result.append(cptr, 5); assert(result == "***C-str"); // 3) Добавить нуль-терминированную C-строку // Примечание: Поскольку “append” возвращает *this, мы можем объединять вызовы в цепочку. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) Добавить всю строку result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) Добавить часть строки result.append(str, 3, 2); assert(result == "***C-str C-string std::string::"); // 8) Добавить диапазон result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std::string::n"); // 9) Добавить список инициализации result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std::string::npos"); }
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 847 | C++98 | не было гарантии безопасности исключений | добавлена строгая гарантия безопасности исключений |
| LWG 2250 | C++98 |
поведение перегрузки
(7)
было
неопределенным, если pos > str. size ( ) является true |
всегда выбрасывает исключение в этом случае |
| LWG 2788 | C++98 |
перегрузка
(8)
использовала аллокатор по умолчанию
для создания временной строки |
получает аллокатор
из get_allocator() |
| LWG 2946 | C++17 | перегрузка (4) вызывает неоднозначность в некоторых случаях | устранено путем превращения в шаблон |
Смотрите также
|
(C++23)
|
добавляет диапазон символов в конец
(публичная функция-член) |
|
добавляет символы в конец
(публичная функция-член) |
|
|
объединяет две строки
(функция) |
|
|
объединяет определённое количество символов двух строк
(функция) |
|
|
добавляет копию одной широкой строки к другой
(функция) |
|
|
добавляет определённое количество широких символов из одной широкой строки в другую
(функция) |