Namespaces
Variants

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

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)
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)

문자열에 추가 문자들을 붙입니다.

1) 문자 count의 개수 ch개를 추가합니다.
2) 범위 [s, s + count)의 문자들을 추가합니다.
[s, s + count)이 올바른 범위가 아니라면 동작이 정의되지 않습니다.
3) return append(s, Traits::length(s));와 동일합니다.
4,5) 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입니다.
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이면 str의 pos부터 시작하는 모든 문자들이 추가됩니다.
    • 그렇지 않으면 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()));와 동일합니다.

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

(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)