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, |
(начиная с C++17) (до C++20) |
|
template< class StringViewLike > constexpr basic_string& append( const StringViewLike& t, |
(начиная с C++20) | |
Добавляет в строку дополнительные символы.
[
pos,
pos + count)
из str.
- Если запрошенная подстрока выходит за конец строки или если count == npos, добавляемая подстрока имеет вид
[
pos,
size())
. - Если pos > str.size(), генерируется std::out_of_range.
[
s,
s + count)
. Этот диапазон может содержать нулевые символы.[
first,
last)
.
Эта перегрузка имеет тот же эффект, что и перегрузка (1), если |
(до C++11) |
Эта перегрузка участвует в разрешении перегрузки только в том случае, если |
(начиная с C++11) |
std::basic_string_view<CharT, Traits>> равно true и std::is_convertible_v<const StringViewLike&, const CharT*> равно false.
[
pos,
pos + count)
из sv.
- Если запрошенное подпредставление выходит за пределы sv или если count == npos, добавляемое подпредставление имеет вид
[
pos,
sv.size())
. - Если pos >= sv.size(), генерирует std::out_of_range.
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) в некоторых случаях вызывает неоднозначность | исправлено, сделав его шаблоном |
[править] Смотрите также
(C++23) |
добавляет диапазон символов в конец (public функция-элемент) |
добавляет символы в конец (public функция-элемент) | |
объединяет две строки (функция) | |
объединяет определённое количество символов двух строк (функция) | |
добавляет копию одной широкой строки к другой (функция) | |
добавляет определённое количество широких символов из одной широкой строки в другую (функция) |