Namespaces
Variants

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

From cppreference.net
std::basic_string
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)
(7)
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)
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)

문자열에 추가 문자를 덧붙입니다.

1) 문자 ch count 개 복사하여 추가합니다.
2) [ s , s + count ) 범위 내의 문자들을 추가합니다.
만약 [ s , s + count ) 가 유효한 범위가 아니라면, 동작은 정의되지 않습니다.
3) 다음에 해당함: return append ( s, Traits :: length ( s ) ) ; .
4,5) string view의 문자들을 추가합니다 sv t 로부터 생성됩니다.
  • 만약 t 만 제공된 경우, sv 의 모든 문자가 추가됩니다.
  • 만약 pos 가 함께 제공된 경우:
    • 만약 count npos 인 경우, sv 에서 pos 부터 시작하는 모든 문자가 추가됩니다.
    • 그렇지 않으면, std:: min ( count, sv. size ( ) - pos ) 개의 문자들이 sv 에서 pos 부터 시작하여 추가됩니다.
다음 오버로드들은 다음의 모든 조건이 만족될 때만 오버로드 해결에 참여합니다:
4) 다음과 동일함: std:: basic_string_view < CharT, Traits > sv = t ;
return append ( sv. data ( ) , sv. size ( ) ) ;
.
5) 다음과 동일함: std:: basic_string_view < CharT, Traits > sv = t ;
return append ( sv. substr ( pos, count ) ) ;
.
6,7) 다른 문자열의 문자들을 추가합니다 str .
  • 만약 str 만 제공된 경우, 해당 문자열의 모든 문자가 추가됩니다.
  • 만약 pos 도 제공된 경우:
    • 만약 count npos 인 경우, pos 위치부터 시작하는 str 의 모든 문자가 추가됩니다.
    • 그렇지 않으면, std:: min ( count, str. size ( ) - pos ) 개의 문자만큼 str 에서 pos 위치부터 시작하는 문자가 추가됩니다.
6) 다음에 해당함 return append ( str. data ( ) , str. size ( ) ) ; .
7) 다음 표현과 동등함: return append ( std:: basic_string_view < CharT, Traits >
( str ) . substr ( pos, count ) ) ;
.
(C++20부터)
8) 다음 코드와 동일함: return append ( basic_string ( first, last, get_allocator ( ) ) ) ; .

이 오버로드는 InputIt 가 정수형인 경우 (1) 번 오버로드와 동일한 효과를 가집니다.

(C++11 이전)

이 오버로드는 InputIt LegacyInputIterator 요구사항을 만족할 때만 오버로드 해결에 참여합니다.

(C++11 이후)
9) 다음에 해당함: 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 를 발생시킵니다.

5) 만약 pos > sv. size ( ) true 이면, std::out_of_range 를 발생시킵니다.
7) 만약 pos > str. size ( ) true 이면, std::out_of_range 를 발생시킵니다.

어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( 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) 가 일부 경우에 모호성 발생 템플릿으로 만들어 회피

참고 항목

문자 범위를 끝에 추가함
(public member function)
문자를 끝에 추가함
(public member function)
두 문자열을 연결함
(function)
두 문자열의 특정 양의 문자를 연결함
(function)
와이드 문자열의 복사본을 다른 와이드 문자열에 추가함
(function)
한 와이드 문자열에서 다른 와이드 문자열로 특정 양의 와이드 문자를 추가함
(function)