Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: append

From cppreference.net
std::basic_string
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)
(7)
basic_string & append ( const basic_string & str,
size_type pos, size_type count ) ;
(до 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)

Добавляет дополнительные символы к строке.

1) Добавляет count копий символа ch .
2) Добавляет символы из диапазона [ s , s + count ) .
Если [ s , s + count ) не является допустимым диапазоном , поведение не определено.
3) Эквивалентно return append ( s, Traits :: length ( s ) ) ; .
4,5) Добавляет символы из строкового представления sv , созданного из t .
  • Если указан только t , добавляются все символы из sv .
  • Если также указан pos :
    • Если count равен npos , добавляются все символы из sv , начиная с позиции pos .
    • В противном случае добавляются std:: min ( count, sv. size ( ) - pos ) символов из sv , начиная с позиции pos .
Эти перегрузки участвуют в разрешении перегрузки только при выполнении всех следующих условий:
4) Эквивалентно std:: basic_string_view < CharT, Traits > sv = t ;
return append ( sv. data ( ) , sv. size ( ) ) ;
.
5) Эквивалентно std:: basic_string_view < CharT, Traits > sv = t ;
return append ( sv. substr ( pos, count ) ) ;
.
6,7) Добавляет символы из другой строки str .
  • Если указана только str , добавляются все символы из неё.
  • Если также указана pos :
    • Если count равен npos , добавляются все символы из str , начиная с позиции pos .
    • В противном случае добавляются std:: min ( count, str. size ( ) - pos ) символов из str , начиная с позиции pos .
6) Эквивалентно return append ( str. data ( ) , str. size ( ) ) ; .
7) Эквивалентно return append ( std:: basic_string_view < CharT, Traits >
( str ) . substr ( pos, count ) ) ;
.
(начиная с C++20)
8) Эквивалентно return append ( basic_string ( first, last, get_allocator ( ) ) ) ; .

Эта перегрузка имеет тот же эффект, что и перегрузка (1) , если InputIt является целочисленным типом.

(до C++11)

Эта перегрузка участвует в разрешении перегрузки только если InputIt удовлетворяет требованиям LegacyInputIterator .

(начиная с C++11)
9) Эквивалентно 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 .

5) Если pos > sv. size ( ) равно true , выбрасывается исключение std::out_of_range .
7) Если pos > str. size ( ) равно true , генерируется исключение std::out_of_range .

Если по какой-либо причине возникает исключение, эта функция не оказывает никакого эффекта ( гарантия строгой безопасности исключений ).

Пример

#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) вызывает неоднозначность в некоторых случаях устранено путем превращения в шаблон

Смотрите также

добавляет диапазон символов в конец
(публичная функция-член)
добавляет символы в конец
(публичная функция-член)
объединяет две строки
(функция)
объединяет определённое количество символов двух строк
(функция)
добавляет копию одной широкой строки к другой
(функция)
добавляет определённое количество широких символов из одной широкой строки в другую
(функция)