std::basic_string<CharT,Traits,Allocator>::append
basic_string& append( size_type count, CharT ch );
|
(1) | (C++20부터 constexpr) |
basic_string& append( const CharT* s, size_type count );
|
(2) | (C++20부터 constexpr) |
basic_string& append( const CharT* s );
|
(3) | (C++20부터 constexpr) |
template< class SV >
basic_string& append( const SV& t );
|
(4) | (C++17부터) (C++20부터 constexpr) |
template< class SV >
basic_string& append( const SV& t, size_type pos,
size_type count = npos );
|
(5) | (C++17부터) (C++20부터 constexpr) |
basic_string& append( const basic_string& str );
|
(6) | (C++20부터 constexpr) |
basic_string& append( const basic_string& str,
size_type pos, size_type count );
|
(7) | (C++14까지) |
basic_string& append( const basic_string& str,
size_type pos, size_type count = npos );
|
(C++14부터) (C++20부터 constexpr) |
|
template< class InputIt >
basic_string& append( InputIt first, InputIt last );
|
(8) | (C++20부터 constexpr) |
basic_string& append( std::initializer_list<CharT> ilist );
|
(9) | (C++11부터) (C++20부터 constexpr) |
문자열에 추가 문자들을 붙입니다.
count의 개수 ch개를 추가합니다.[s, s + count)의 문자들을 추가합니다.[s, s + count)이 올바른 범위가 아니라면 동작이 정의되지 않습니다.return append(s, Traits::length(s));와 동일합니다.sv로부터 생성된 문자열 뷰 t의 문자들을 추가합니다.
t만 제공되면sv의 모든 문자들이 추가됩니다.pos도 제공된다면:count이npos이면sv의pos부터 시작하는 모든 문자들이 추가됩니다.- 그렇지 않으면
std::min(count, sv.size() - pos)개의sv안pos부터 시작하는 문자들이 추가됩니다.
std::is_convertible_v<const SV&, std::basic_string_view<CharT, Traits>>은(는)true입니다.std::is_convertible_v<const SV&, const CharT*>은(는)false입니다.
std::basic_string_view<CharT, Traits> sv = t;return append(sv.data(), sv.size());와 동일합니다.std::basic_string_view<CharT, Traits> sv = t;return append(sv.substr(pos, count));와 동일합니다.str의 문자들을 추가합니다.
str만 제공되면 그 안의 모든 문자들이 추가됩니다.pos도 제공된다면:count이npos이면str의pos부터 시작하는 모든 문자들이 추가됩니다.- 그렇지 않으면
std::min(count, str.size() - pos)개의str안pos부터 시작하는 문자들이 추가됩니다.
return append(str.data(), str.size());와 동일합니다.|
7)
return append(std::basic_string_view<CharT, Traits>(str).substr(pos, count));와 동일합니다. |
(C++20부터) |
return append(basic_string(first, last, get_allocator()));와 동일합니다.
|
이 오버로드는 이 정수형이면 오버로드 (1) |
(C++11까지) |
|
이 오버로드는 |
(C++11부터) |
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
를 발생시킵니다.
어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).
예제
#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 | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 847 | C++98 | 예외 안전성 보장이 없었음 | 강력한 예외 안전성 보장 추가 |
| LWG 2250 | C++98 |
오버로드
(7)
의 동작이
pos > str. size ( ) 인 경우 true 이면 정의되지 않음 |
이 경우 항상 예외를 throw함 |
| LWG 2788 | C++98 |
오버로드
(8)
가 기본 생성된
할당자를 사용하여 임시 문자열 생성 |
할당자를
get_allocator() 에서 획득 |
| LWG 2946 | C++17 | 오버로드 (4) 가 일부 경우에 모호성 발생 | 템플릿으로 만들어 회피 |
참고 항목
|
(C++23)
|
문자 범위를 끝에 추가함
(public member function) |
|
문자를 끝에 추가함
(public member function) |
|
|
두 문자열을 연결함
(function) |
|
|
두 문자열의 특정 양의 문자를 연결함
(function) |
|
|
와이드 문자열의 복사본을 다른 와이드 문자열에 추가함
(function) |
|
|
한 와이드 문자열에서 다른 와이드 문자열로 특정 양의 와이드 문자를 추가함
(function) |