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
, 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
, 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
, 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
.
(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
) 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 -
to initialize the characters of the string with Return value
*this
Exceptions
2)
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
to exceed
, throws
.
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
C++98 there was no exception safety guarantee added strong exception safety guarantee
C++11 non-normative note stated that overload (
)
can be implemented by swapping corrected to require move assignment
C++98 the behavior of overload (
) was
undefined if pos>str.size() is truealways throws an exception in this case
C++98 overload (
) and the copy assignment
operator had different effects they have the same effect
C++17 overload (
) caused ambiguity in some cases avoided by making it a template See also