std::basic_string::assign - std::basic_string::assign
basic_string& assign( (until size_type count, CharT ch );
C++20) constexpr basic_string& (since assign( size_type count, C++20)
CharT ch ); basic_string& assign( const (until basic_string& str );
C++20) constexpr basic_string& (since assign( const basic_string&
C++20) str ); basic_string& assign( const basic_string& str, (until
size_type pos, size_type C++14) count ); basic_string& assign( const
(since basic_string& str, C++14) size_type pos, size_type (until count =
npos); C++20) constexpr basic_string& assign( const basic_string&
(since str, C++20) size_type pos, size_type count = npos);
(since basic_string& assign( C++11) basic_string&& str ); (until
C++17) basic_string& assign( (since basic_string&& str ) C++17)
noexcept(/* see below */); (until
C++20) constexpr basic_string& (since assign( basic_string&& str
) C++20) noexcept(/* see below */); basic_string& assign( const (until
CharT* s, size_type count ); C++20) constexpr basic_string& (since
assign( const CharT* s, C++20) size_type count ); basic_string& assign(
const (until CharT* s ); C++20) constexpr basic_string& (since assign(
const CharT* s ); (1) C++20) template< class InputIt >
basic_string& assign( (2) (until InputIt first, InputIt last
C++20) ); template< class InputIt > (3) constexpr
basic_string& (since assign( InputIt first, C++20) InputIt last );
basic_string& assign( (since std::initializer_list<CharT> C++11)
ilist ); (4) (until
C++20) constexpr basic_string& assign( (since
std::initializer_list<CharT> C++20) ilist ); template < class
(5) (since StringViewLike > C++17) basic_string& assign( const
(6) (until StringViewLike& t ); C++20) template < class
(7) StringViewLike > (since constexpr basic_string& C++20)
assign( const StringViewLike& t ); (8) template < class
StringViewLike >
(since basic_string& assign( const (9) C++17) StringViewLike&
t, (until
C++20) size_type pos, size_type count = npos); template < class
(10) StringViewLike >
constexpr basic_string& (since assign( const C++20)
StringViewLike& t,
size_type pos, size_type count = npos);
Replaces the contents of the string.
1) Replaces the contents with count copies of character ch.
2) Replaces the contents with a copy of str. Equivalent to *this = str;.
In particular, allocator propagation may take place.
(since C++11)
3) Replaces the contents with a substring [pos, pos+count) of str. If the
requested
substring lasts past the end of the string, or if count == npos, the
resulting
substring is [pos, str.size()). If pos > str.size(), std::out_of_range is
thrown.
4) Replaces the contents with those of str using move semantics. Equivalent
to *this
= std::move(str). In particular, allocator propagation may take place.
5) Replaces the contents with copies of the characters in the range [s,
s+count).
This range can contain null characters.
6) Replaces the contents with those of null-terminated character string
pointed to
by s. The length of the string is determined by the first null character
using
Traits::length(s).
7) Replaces the contents with copies of the characters in the range [first,
last).
This overload does not participate in overload resolution if InputIt does not
satisfy LegacyInputIterator.
(since C++11)
8) Replaces the contents with those of the initializer list ilist.
9) Implicitly converts t to a string view sv as if by
std::basic_string_view<CharT,
Traits> sv = t;, then replaces the contents with those of sv, as if by
assign(sv.data(), sv.size()). This overload participates in overload
resolution only
if std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT,
Traits>> is true and std::is_convertible_v<const
StringViewLike&, const CharT*> is
false.
10) Implicitly converts t to a string view sv as if by
std::basic_string_view<CharT,
Traits> sv = t;, then replaces the contents with the characters from the
subview
[pos, pos+count) of sv. If the requested subview lasts past the end of sv, or
if
count == npos, the resulting subview is [pos, sv.size()). If pos >
sv.size(),
std::out_of_range is thrown. This overload participates in overload
resolution only
if std::is_convertible_v<const StringViewLike&,
std::basic_string_view<CharT,
Traits>> is true and std::is_convertible_v<const
StringViewLike&, const CharT*> is
false.
count - size of the resulting string
pos - index of the first character to take
ch - value to initialize characters of the string with
first, last - range to copy the characters from
str - string to be used as source to initialize the characters with
s - pointer to a character string to use as source to initialize the
string with
ilist - std::initializer_list to initialize the characters of the string with
t - object (convertible to std::basic_string_view) to initialize the
characters of the string with
-
InputIt must meet the requirements of LegacyInputIterator.
1) linear in count
2) linear in size of str
3) linear in count
4) constant. If alloc is given and alloc != other.get_allocator(), then
linear.
5) linear in count
6) linear in size of s
7) linear in distance between first and last
8) linear in size of ilist
If an exception is thrown for any reason, this function has no
effect (strong
exception guarantee).
(since C++11)
If the operation would result in size() > max_size(), throws
std::length_error.
4) noexcept specification: (since
noexcept(std::allocator_traits<Allocator>::propagate_on_container_move_assignment::value
C++17) ||
std::allocator_traits<Allocator>::is_always_equal::value)
// Run this code
#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(basic_string const& str)
s.assign(c);
std::cout << c << " == " << s <<'\n'; //
"Exemplary == Exemplary"
// assign(basic_string const& 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(charT const* s, size_type count)
s.assign("C-style string", 7);
std::cout << s << '\n'; // "C-style"
// assign(charT const* 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
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 2063 C++11 non-normative note stated that swap is corrected to require
move
a valid implementation of move-assign assignment
LWG 2579 C++11 assign(const basic_string&) doesn't made to propagate
propagate allocators allocators if needed
LWG 2946 C++17 string_view overload causes ambiguity avoided by making it a
in some cases template
constructor constructs a basic_string
(public member function)
operator= assigns values to the string
(public member function)