std::basic_string<CharT,Traits,Allocator>::assign - cppreference.com

From cppreference.com

basic_string&assign(constbasic_string&str); (1)(constexpr since C++20)basic_string&assign(basic_string&&str)noexcept(/* see below */); (2)(since C++11)
(constexpr since C++20)basic_string&assign(size_typecount,CharTch); (3)(constexpr since C++20)basic_string&assign(constCharT*s,size_typecount); (4)(constexpr since C++20)basic_string&assign(constCharT*s); (5)(constexpr since C++20)template<classSV>basic_string&assign(constSV&t); (6)(since C++17)
(constexpr since C++20)template<classSV>basic_string&assign(constSV&t,size_typepos,size_typecount=npos); (7)(since C++17)
(constexpr since C++20)basic_string&assign(constbasic_string&str,size_typepos,size_typecount); (8)(until C++14)basic_string&assign(constbasic_string&str,size_typepos,size_typecount=npos);(since C++14)
(constexpr since C++20)template<classInputIt>basic_string&assign(InputItfirst,InputItlast); (9)(constexpr since C++20)basic_string&assign(std::initializer_list<CharT>ilist); (10)(since C++11)
(constexpr since C++20)Replaces the contents of the string.

1) Equivalent to return*this=str;.

2) Equivalent to return*this=std::move(str);.

3) Replaces the contents with count copies of character ch.

Equivalent to clear();resize(n,c);return*this;.

4) Replaces the contents with copies of the characters in the range [s, s+count).

If [s, s+count) is not a

valid range

, the behavior is undefined.

5) Equivalent to returnassign(s,Traits::length(s));.

6,7) Replaces the contents with characters in a string view sv constructed from t.

If only t is provided, replaces the contents with all characters in sv.

If pos is also provided: If count is

npos

, replaces the contents with all characters in sv starting from pos.

Otherwise, replaces the contents with the std::min(count,sv.size()-pos) characters in sv starting from pos.

These overloads participate in overload resolution only if all following conditions are satisfied:

std::is_convertible_v<constSV&,std::basic_string_view<CharT,Traits>> is true.

std::is_convertible_v<constSV&,constCharT*> is false.

6) Equivalent to std::basic_string_view<CharT,Traits>sv=t;
returnassign(sv.data(),sv.size());.

7) Equivalent to std::basic_string_view<CharT,Traits>sv=t;
returnassign(sv.substr(pos,count));.

8) Replaces the contents with characters in str.

If count is

npos

, replaces the contents with all characters in str starting from pos.

Otherwise, replaces the contents with the std::min(count,str.size()-pos) characters in str starting from pos.

Equivalent to returnassign(std::basic_string_view<CharT,Traits>
(str).substr(pos,count));.

(since C++20)9) Equivalent to returnassign(basic_string(first,last,get_allocator()));.

This overload participates in overload resolution only if InputIt satisfies the requirements of

LegacyInputIterator

.

(since C++11)10) Equivalent to returnassign(ilist.begin(),ilist.size());.

Parameters

str - string to be used as source to initialize the characters with count - size of the resulting string ch - value to initialize characters of the string with s - pointer to a character string to use as source to initialize the string with t - object (convertible to

std::basic_string_view

) to initialize the characters of the string with pos - index of the first character to take first, last - range to copy the characters from ilist -

std::initializer_list

to initialize the characters of the string with Return value

*this

Exceptions

2)

noexcept

specification:

noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value||std::allocator_traits<Allocator>::is_always_equal::value)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

).

Example

Run this code

#include<iostream>#include<iterator>#include<string>intmain(){std::strings;// assign(size_type count, CharT ch)s.assign(4,'=');std::cout<<s<<'\n';// "===="std::stringconstc("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"charmutable_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"}Output:

==== Exemplary == Exemplary Exemplar C++ by example C-style C-style C-style string C-style 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 2063

C++11 non-normative note stated that overload (

2

)
can be implemented by swapping corrected to require move assignment

LWG 2250

C++98 the behavior of overload (

8

) was
undefined if pos>str.size() is truealways throws an exception in this case

LWG 2579

C++98 overload (

1

) and the copy assignment
operator had different effects they have the same effect

LWG 2946

C++17 overload (

6

) caused ambiguity in some cases avoided by making it a template See also