std::basic_string<CharT,Traits,Allocator>::append - cppreference.com (original) (raw)
| basic_string& append( size_type count, CharT ch ); | (1) | (constexpr since C++20) |
|---|---|---|
| basic_string& append( const CharT* s, size_type count ); | (2) | (constexpr since C++20) |
| basic_string& append( const CharT* s ); | (3) | (constexpr since C++20) |
| template< class SV >basic_string& append( const SV& t ); | (4) | (since C++17) (constexpr since C++20) |
| template< class SV > basic_string& append( const SV& t, size_type pos, size_type count = npos ); | (5) | (since C++17) (constexpr since C++20) |
| basic_string& append( const basic_string& str ); | (6) | (constexpr since C++20) |
| (7) | ||
| basic_string& append( const basic_string& str, size_type pos, size_type count ); | (until C++14) | |
| basic_string& append( const basic_string& str, size_type pos, size_type count = npos ); | (since C++14) (constexpr since C++20) | |
| template< class InputIt >basic_string& append( InputIt first, InputIt last ); | (8) | (constexpr since C++20) |
| basic_string& append( std::initializer_list<CharT> ilist ); | (9) | (since C++11) (constexpr since C++20) |
Appends additional characters to the string.
Appends count copies of character ch.
Appends characters in the range
[s,s + count).
If [s, s + count) is not a valid range, the behavior is undefined.
- Equivalent to return append(s, Traits::length(s));.
4,5) Appends characters in a string view sv constructed from t.
- If only t is provided, all characters in sv are appended.
- If pos is also provided:
Equivalent to std::basic_string_view<CharT, Traits> sv = t;
return append(sv.data(), sv.size());.Equivalent to std::basic_string_view<CharT, Traits> sv = t;
return append(sv.substr(pos, count));.
6,7) Appends characters in another string str.
- If only str is provided, all characters in it are appended.
- If pos is also provided:
- Equivalent to return append(str.data(), str.size());.
| 7) Equivalent to return append(std::basic_string_view<CharT, Traits> (str).substr(pos, count));. | (since C++20) |
|---|
- Equivalent to return append(basic_string(first, last, get_allocator()));.
| This overload has the same effect as overload (1) if InputIt is an integral type. | (until C++11) |
|---|---|
| This overload participates in overload resolution only if InputIt satisfies the requirements of LegacyInputIterator. | (since C++11) |
- Equivalent to return append(ilist.begin(), ilist.size());.
Contents
[edit] Parameters
| count | - | number of characters to append |
|---|---|---|
| ch | - | character value to append |
| s | - | pointer to the character string to append |
| t | - | object convertible to std::basic_string_view with the characters to append |
| pos | - | the index of the first character to append |
| str | - | string to append |
| first, last | - | range of characters to append |
| ilist | - | initializer list with the characters to append |
[edit] Return value
*this
[edit] Complexity
There are no standard complexity guarantees, typical implementations behave similar to std::vector::insert().
[edit] Exceptions
If the operation would cause size() to exceed max_size(), throws std::length_error.
If an exception is thrown for any reason, this function has no effect (strong exception safety guarantee).
[edit] Example
#include #include int main() { std::string str = "std::string"; const char* cptr = "C-string"; const char carr[] = "range"; std::string result; // 1) Append a char 3 times. // Note: This is the only overload accepting “CharT”s. result.append(3, ''); assert(result == "**"); // 2) Append a fixed-length C-string result.append(cptr, 5); assert(result == "***C-str"); // 3) Append a null-terminated C-string // Note: Because “append” returns *this, we can chain calls together. result.append(1, ' ').append(cptr); assert(result == "***C-str C-string"); // 6) Append a whole string result.append(1, ' ').append(str); assert(result == "***C-str C-string std::string"); // 7) Append part of a string result.append(str, 3, 2); assert(result == "***C-str C-string std:🧵:"); // 8) Append range result.append(&carr[2], &carr[3]); assert(result == "***C-str C-string std:🧵:n"); // 9) Append initializer list result.append({'p', 'o', 's'}); assert(result == "***C-str C-string std:🧵:npos"); }
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 847 | C++98 | there was no exception safety guarantee | added strong exception safety guarantee |
| LWG 2250 | C++98 | the behavior of overload (7) wasundefined if pos > str.size() is true | always throws an exception in this case |
| LWG 2788 | C++98 | overload (8) used a default constructedallocator to construct the temporary string | obtains the allocatorfrom get_allocator() |
| LWG 2946 | C++17 | overload (4) causes ambiguity in some cases | avoided by making it a template |
[edit] See also
| append_range(C++23) | appends a range of characters to the end (public member function) [edit] |
|---|---|
| operator+= | appends characters to the end (public member function) [edit] |
| strcat | concatenates two strings (function) [edit] |
| strncat | concatenates a certain amount of characters of two strings (function) [edit] |
| wcscat | appends a copy of one wide string to another (function) [edit] |
| wcsncat | appends a certain amount of wide characters from one wide string to another (function) [edit] |