Пространства имён
Варианты
Действия

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

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-элементы
Доступ к элементам
Итераторы
Ёмкость
Операции
basic_string::append
Поиск
Константы
Правила вывода (C++17)
Функции, не являющиеся элементами
Ввод/Вывод
Сравнение
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Числовые преобразования
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Вспомогательные классы
 
(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) Добавляет подстроку [pospos + count) из str.
  • Если запрошенная подстрока выходит за конец строки или если count == npos, добавляемая подстрока имеет вид [possize()).
  • Если pos > str.size(), генерируется std::out_of_range.
4) Добавляет символы в диапазоне [ss + count). Этот диапазон может содержать нулевые символы.
Если [ss + count) не является допустимым диапазоном, поведение не определено.
5) Добавляет строку символов с нулевым завершением, на которую указывает s, как если бы append(s, Traits::length(s)).
6) Добавляет символы в диапазоне [firstlast).

Эта перегрузка имеет тот же эффект, что и перегрузка (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;, затем добавляет символы из подпредставления [pospos + count) из sv.
  • Если запрошенное подпредставление выходит за пределы sv или если count == npos, добавляемое подпредставление имеет вид [possv.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) Добавляет символ 3 раза.
    // Обратите внимание: это единственная перегрузка, принимающая символы.
    output.append(3, '*');
    std::cout << "1) " << output << '\n';
 
    // 2) Добавляет целую строку
    output.append(str);
    std::cout << "2) " << output << '\n';
 
    // 3) Добавляет часть строки (в данном случае последние 3 буквы)
    output.append(str, 3, 3);
    std::cout << "3) " << output << '\n';
 
    // 4) Добавляет часть C-строки
    // Обратите внимание, поскольку `append` возвращает *this,
    // мы можем объединять вызовы в цепочку
    output.append(1, ' ').append(carr, 4);
    std::cout << "4) " << output << '\n';
 
    // 5) Добавляет целую строку C
    output.append(cptr);
    std::cout << "5) " << output << '\n';
 
    // 6) Добавляет диапазон
    output.append(&carr[3], std::end(carr));
    std::cout << "6) " << output << '\n';
 
    // 7) Добавляет список инициализаторов
    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++:

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

[править] Смотрите также

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