Namespaces
Variants

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

From cppreference.net
std::basic_string
basic_string & assign ( const basic_string & str ) ;
(1) (C++20부터 constexpr)
basic_string & assign ( basic_string && str ) noexcept ( /* 아래 참조 */ ) ;
(2) (C++11부터)
(C++20부터 constexpr)
basic_string & assign ( size_type count, CharT ch ) ;
(3) (C++20부터 constexpr)
basic_string & assign ( const CharT * s, size_type count ) ;
(4) (C++20부터 constexpr)
basic_string & assign ( const CharT * s ) ;
(5) (C++20부터 constexpr)
template < class SV >
basic_string & assign ( const SV & t ) ;
(6) (C++17부터)
(C++20부터 constexpr)
template < class SV >

basic_string & assign ( const SV & t,

size_type pos, size_type count = npos ) ;
(7) (C++17부터)
(C++20부터 constexpr)
(8)
basic_string & assign ( const basic_string & str,
size_type pos, size_type count ) ;
(C++14까지)
basic_string & assign ( const basic_string & str,
size_type pos, size_type count = npos ) ;
(C++14부터)
(C++20부터 constexpr)
template < class InputIt >
basic_string & assign ( InputIt first, InputIt last ) ;
(9) (C++20부터 constexpr)
basic_string & assign ( std:: initializer_list < CharT > ilist ) ;
(10) (C++11부터)
(C++20부터 constexpr)

문자열의 내용을 대체합니다.

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

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

(C++11부터)
10) 다음에 해당함: return assign ( ilist. begin ( ) , ilist. size ( ) ) ; .

목차

매개변수

str - 문자열을 초기화하는 데 사용할 소스 문자열
count - 결과 문자열의 크기
ch - 문자열의 문자를 초기화하는 데 사용할 값
s - 문자열 초기화에 사용할 문자 배열 포인터
t - 문자열의 문자를 초기화하는 데 사용할 객체 ( std::basic_string_view 로 변환 가능)
pos - 가져올 첫 번째 문자의 인덱스
first, last - 문자를 복사할 범위
ilist - std::initializer_list 문자열의 문자를 초기화하는 데 사용할 초기화 리스트

반환값

* this

예외

2)
noexcept 명세:
noexcept ( std:: allocator_traits < Allocator > ::

propagate_on_container_move_assignment :: value ||

std:: allocator_traits < Allocator > :: is_always_equal :: value )

만약 연산으로 인해 size() max_size() 를 초과하게 되는 경우, std::length_error 를 발생시킵니다.

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

어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).

예제

#include <iostream>
#include <iterator>
#include <string>
int main()
{
    std::string s;
    // assign(size_type count, CharT ch)
    s.assign(4, '=');
    std::cout << s << '\n'; // "===="
    std::string const c("Exemplary");
    // assign(const basic_string& str)
    s.assign(c);
    std::cout << c << " == " << s << '\n'; // "Exemplary == Exemplary"
    // assign(const basic_string& str, size_type pos, size_type count)
    s.assign(c, 0, c.length() - 1);
    std::cout << s << '\n'; // "Exemplar";
    // assign(basic_string&& str)
    s.assign(std::string("C++ by ") + "example");
    std::cout << s << '\n'; // "C++ by example"
    // assign(const CharT* s, size_type count)
    s.assign("C-style string", 7);
    std::cout << s << '\n'; // "C-style"
    // assign(const CharT* s)
    s.assign("C-style\0string");
    std::cout << s << '\n'; // "C-style"
    char mutable_c_str[] = "C-style string";
    // assign(InputIt first, InputIt last)
    s.assign(std::begin(mutable_c_str), std::end(mutable_c_str) - 1);
    std::cout << s << '\n'; // "C-style string"
    // assign(std::initializer_list<CharT> ilist)
    s.assign({'C', '-', 's', 't', 'y', 'l', 'e'});
    std::cout << s << '\n'; // "C-style"
}

출력:

====
Exemplary == Exemplary
Exemplar
C++ by example
C-style
C-style
C-style string
C-style

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 847 C++98 예외 안전성 보장이 없었음 강력한 예외 안전성 보장 추가
LWG 2063 C++11 비규격(non-normative) 노트에서 오버로드 ( 2 )
스왑(swapping)으로 구현 가능하다고 명시
이동 할당(move assignment) 요구사항으로 수정
LWG 2250 C++98 오버로드 ( 8 ) 의 동작이
pos > str. size ( ) 인 경우 true 이면 정의되지 않음
이 경우 항상 예외를 throw하도록 수정
LWG 2579 C++98 오버로드 ( 1 ) 와 복사 할당 연산자의
효과가 서로 달랐음
동일한 효과를 가지도록 수정
LWG 2946 C++17 오버로드 ( 6 ) 가 일부 경우에 모호성(ambiguity) 발생 템플릿으로 만들어 모호성 회피

참고 항목

문자열에 문자 범위를 할당
(public member function)
basic_string 을 생성
(public member function)
문자열에 값을 할당
(public member function)