Spec-Zone.ru › C++

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

(1)
basic_string& append( size_type count, CharT ch );
(до C++20)
constexpr basic_string& append( size_type count, CharT ch );
(с C++20)
(2)
basic_string& append( const basic_string& str );
(до C++20)
constexpr basic_string& append( const basic_string& str );
(с C++20)
(3)
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)
(до C++20)
constexpr basic_string& append( const basic_string& str,
                                size_type pos, size_type count = npos );
(с C++20)
(4)
basic_string& append( const CharT* s, size_type count );
(до C++20)
constexpr basic_string& append( const CharT* s, size_type count );
(с C++20)
(5)
basic_string& append( const CharT* s );
(до C++20)
constexpr basic_string& append( const CharT* s );
(с C++20)
(6)
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
(до C++20)
template< class InputIt >
constexpr basic_string& append( InputIt first, InputIt last );
(с C++20)
(7)
basic_string& append( std::initializer_list<CharT> ilist );
(с C++11)
(до C++20)
constexpr basic_string& append( std::initializer_list<CharT> ilist );
(с C++20)
(8)
template< class StringViewLike >
basic_string& append( const StringViewLike& t );
(с C++17)
(до C++20)
template< class StringViewLike >
constexpr basic_string& append( const StringViewLike& t );
(с C++20)
(9)
template< class StringViewLike >
basic_string& append( const StringViewLike& t,
                      size_type pos, size_type count = npos );
(с C++17)
(до C++20)
template< class StringViewLike >
constexpr basic_string& append( const StringViewLike& t,
                                size_type pos, size_type count = npos );
(с C++20)

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

1) Добавляет count копий символа ch.
2) Добавляет строку str.
3) Добавляет подстроку [pos, pos + count) из str.
  • Если запрошенная подстрока выходит за пределы строки, или если count == npos, добавленная подстрока [pos, size()).
  • Если pos > str.size(), выбрасывается std::out_of_range.
4) Добавляет символы в диапазоне [s, s + count). Этот диапазон может содержать нулевые символы.
Если [s, s + count) не является допустимым диапазоном, поведение не определено.
5) Добавляет завершающуюся нулём строку символов, на которую указывает s, как если бы это было выполнено с помощью append(s, Traits::length(s)).
6) Добавляет символы в диапазоне [first, last).

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

(до C++11)

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

(с C++11)
7) Добавляет символы из списка инициализации ilist.
8) Неявное преобразование t в строковый вид sv как если бы это было выполнено с помощью std::basic_string_view<CharT, Traits> sv = t;, затем добавляет все символы из sv как если бы это было выполнено с помощью append(sv.data(), sv.size()).
Эта перегрузка участвует в разрешении перегрузки только если std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
является true и std::is_convertible_v<const StringViewLike&, const CharT*> является false.
9) Неявное преобразование t в строковый вид sv как если бы это было выполнено с помощью std::basic_string_view<CharT, Traits> sv = t;, затем добавляет символы из подстроки [pos, pos + count) из sv.
  • Если запрошенная подстрока выходит за пределы sv, или если count == npos, добавленная подстрока [pos, sv.size()).
  • Если pos >= sv.size(), выбрасывается std::out_of_range.
Эта перегрузка участвует в разрешении перегрузки только если std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT, Traits>>
является true и std::is_convertible_v<const StringViewLike&, const CharT*> является false.

Параметры

count - количество символов для добавления
pos - индекс первого символа для добавления
ch - значение символа для добавления
first, last - диапазон символов для добавления
str - строка для добавления
s - указатель на строку символов для добавления
ilist - список инициализации с символами для добавления
t - объект, преобразуемый в std::basic_string_view с символами для добавления

Возвращаемое значение

*this

Сложность

Нет стандартных гарантий сложности, типичные реализации ведут себя аналогично std::vector::insert().

Исключения

Если операция приведет к size() > max_size(), выбрасывает std::length_error.

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

Пример

#include <iostream>
#include <string>
 
int main()
{
    std::basic_string<char> str = "string";
    const char* cptr = "C-string";
    const char carr[] = "Two and one";
 
    std::string output;
 
    // 1) Append a char 3 times. 
    // Notice, this is the only overload accepting chars.
    output.append(3, '*');
    std::cout << "1) " << output << '\n';
 
    // 2) Append a whole string
    output.append(str);
    std::cout << "2) " << output << '\n';
 
    // 3) Append part of a string (last 3 letters, in this case)
    output.append(str, 3, 3);
    std::cout << "3) " << output << '\n';
 
    // 4) Append part of a C-string
    // Notice, because `append` returns *this, we can chain calls together
    output.append(1, ' ').append(carr, 4);
    std::cout << "4) " << output << '\n';
 
    // 5) Append a whole C-string
    output.append(cptr);
    std::cout << "5) " << output << '\n';
 
    // 6) Append range
    output.append(&carr[3], std::end(carr));
    std::cout << "6) " << output << '\n';
 
    // 7) Append initializer list
    output.append({' ', 'l', 'i', 's', 't'});
    std::cout << "7) " << output << '\n';
}

Вывод:

1) ***
2) ***string
3) ***stringing
4) ***stringing Two 
5) ***stringing Two C-string
6) ***stringing Two C-string and one
7) ***stringing Two C-string and one list

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применён к Поведение как опубликовано Правильное поведение
LWG 847 C++98 не было гарантии безопасности исключений добавлена гарантия сильной безопасности исключений
LWG 2946 C++17 перегрузка (8) вызывает неоднозначность в некоторых случаях избегается путём превращения её в шаблон

См. также

append_range
(C++23)
добавляет диапазон символов в конец
(общедоступный член-функция)
operator+=
добавляет символы в конец
(общедоступный член-функция)
strcat
конкатенирует две строки
(функция)
strncat
конкатенирует определенное количество символов из двух строк
(функция)
wcscat
добавляет копию одной широкой строки в другую
(функция)
wcsncat
добавляет определенное количество широких символов из одной широкой строки в другую
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/basic_string/append

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API