std::basic_string::assign
De cppreference.com
< cpp | string | basic string
(1) | ||
basic_string& assign( size_type count, CharT ch ); | (hasta C++20) | |
constexpr basic_string& assign( size_type count, CharT ch ); | (desde C++20) | |
(2) | ||
basic_string& assign(const basic_string& str ); | (hasta C++20) | |
constexpr basic_string& assign(const basic_string& str ); | (desde C++20) | |
(3) | ||
basic_string& assign(const basic_string& str, size_type pos, size_type count ); | (hasta C++14) | |
basic_string& assign(const basic_string& str, size_type pos, size_type count = npos); | (desde C++14) (hasta C++20) | |
constexpr basic_string& assign(const basic_string& str, size_type pos, size_type count = npos); | (desde C++20) | |
(4) | ||
basic_string& assign( basic_string&& str ); | (desde C++11) (hasta C++17) | |
basic_string& assign( basic_string&& str )noexcept(/* véase más abajo */); | (desde C++17) (hasta C++20) | |
constexpr basic_string& assign( basic_string&& str ) noexcept(/* véase más abajo */); | (desde C++20) | |
(5) | ||
basic_string& assign(const CharT* s, size_type count ); | (hasta C++20) | |
constexpr basic_string& assign(const CharT* s, size_type count ); | (desde C++20) | |
(6) | ||
basic_string& assign(const CharT* s ); | (hasta C++20) | |
constexpr basic_string& assign(const CharT* s ); | (desde C++20) | |
(7) | ||
template<class InputIt > basic_string& assign( InputIt first, InputIt last ); | (hasta C++20) | |
template<class InputIt > constexpr basic_string& assign( InputIt first, InputIt last ); | (desde C++20) | |
(8) | ||
basic_string& assign(std::initializer_list<CharT> ilist ); | (desde C++11) (hasta C++20) | |
constexpr basic_string& assign(std::initializer_list<CharT> ilist ); | (desde C++20) | |
(9) | ||
template<class T > basic_string& assign(const T& t ); | (desde C++17) (hasta C++20) | |
template<class T > constexpr basic_string& assign(const T& t ); | (desde C++20) | |
(10) | ||
template<class T > basic_string& assign(const T& t, | (desde C++17) (hasta C++20) | |
template<class T > constexpr basic_string& assign(const T& t, | (desde C++20) | |
Reemplaza el contenido de la cadena.
1) Reemplaza el contenido con
count
copias del carácter ch
.2) Reemplaza el contenido con una copia de
str
. Equivalente a *this = str;. En particular, puede tomar lugar la propagación del asignador de memoria.(desde C++11)3) Reemplaza el contenido conm una subcadena
[pos, pos+count)
de str
. Si la subcadena requerida va más allá del final de la cadena, o si count == npos, la subcadena resultante es [pos, str.size())
. Si pos > str.size(), se lanza std::out_of_range. 4) Reemplaza el contenido con el de
str
usando semántica de movimiento. Equivalente a *this = std::move(str). En particular, puede tomar lugar la propagación del asignador de memoria.5) Reemplaza el contenido con copias de los caracters en el rango
[s, s+count)
. Este rango puede contener caracteres nulos.6) Reemplaza el contenido con el de la cadena de caracteres terminada en nulo apuntada por
s
. La longitud de la cadena se determina por el primer carácter nulo usando Traits::length(s). 7) Reemplaza el contenido con copias de los caracters en el rango
[first, last)
. Esta sobrecarga no participa en la resolución de sobrecarga si InputIt
no satisface a InputIterator.(desde C++11)8) Reemplaza el contenido con el de la lista de inicializadores
ilist
.9) Implícitamente convierte
t
a una vista sobre cadena sv
como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces reemplaza el contenido con el de sv
, como si fuera mediante assign(sv.data(), sv.size()). Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const T&, const CharT*> es false.10) Implícitamente convierte
t
a una vista sobre cadena sv
como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, entonces reemplaza el contenido con los caracteres de la subvista [pos, pos+count)
de sv
. Si la subvista requerida va más allá del final de sv
, o si count == npos, la subvista resultante es [pos, sv.size())
. Si pos > sv.size(), se lanza std::out_of_range.. Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_convertible_v<const T&, std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const T&, const CharT*> es false.Contenido |
[editar]Parámetros
count | - | Tamaño de la cadena resultante. |
pos | - | Índice del primer carácter a tomar. |
ch | - | Valor con el cual inicializar los caracteres de la cadena. |
first, last | - | Rango del cual copiar los caracteres. |
str | - | Cadena a usarse como fuente con la cual inicializar la cadena. |
s | - | Puntero a una cadena de caracteres terminada en nulo con el cual inicializar la cadena. |
ilist | - | std::initializer_list con la cual inicializar la cadena. |
t | - | Objeto convertible a std::basic_string_view) con el cual inicializar la cadena. |
Requisitos de tipo | ||
-InputIt debe satisfacer los requisitos de InputIterator. |
[editar]Valor de retorno
*this
[editar]Complejidad
1) Lineal en
count
.2) Lineal en el tamaño de
str
.3) Lineal en
count
.4) Constante. Si se da
alloc
y alloc != other.get_allocator(), entonces es lineal.5) Lineal en
count
6) Lineal en el tamaño de
s
.7) Lineal en la distancia entre
first
y last
.8) Lineal en el tamaño de
ilist
.[editar]Excepciones
Si por alguna razón se lanza una excepción, esta función no tiene efecto (garantía de excepción fuerte).(desde C++11)
Si la operación resultara en size() > max_size()
, se lanza std::length_error.
4) Especificación noexcept: (desde C++11)
EjemploEjecuta este código #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::stringconst c("Ejemplario");// assign(basic_string const& str) s.assign(c);std::cout<< c <<"=="<< s <<'\n';// "Ejemplario == Ejemplario" // assign(basic_string const& str, size_type pos, size_type count) s.assign(c, 0, c.length()-1);std::cout<< s <<'\n';// "Ejemplar"; // assign(basic_string&& str) s.assign(std::string("C++ por medio de ")+"ejemplos");std::cout<< s <<'\n';// "C++ por medio de ejemplos" // assign(charT const* s, size_type count) s.assign("estilo C string", 7);std::cout<< s <<'\n';// "estilo C" // assign(charT const* s) s.assign("estilo C\0string");std::cout<< s <<'\n';// "estilo C" char mutable_c_str[]="cadena estilo C";// assign(InputIt first, InputIt last) s.assign(std::begin(mutable_c_str), std::end(mutable_c_str)-1);std::cout<< s <<'\n';// "cadena estilo C" // assign(std::initializer_list<charT> ilist) s.assign({'C', '-', 's', 't', 'y', 'l', 'e'});std::cout<< s <<'\n';// "estilo C"} Salida: ==== Ejemplario==Ejemplario Ejemplar C++ por medio de ejemplos estilo C estilo C cadena estilo C estilo C | (desde C++17) |
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2063 | C++11 | Nota no-normativa establecía que swap es unaimplementación válida de la asignación de movimiento | Corregida para soportar asignadores de memoria |
LWG 2579 | C++11 | assign(const basic_string&) no propaga los asignadores de memoria | Se hizo que propagara los asignadores si es necesario |
LWG 2946 | C++17 | Sobrecarga de string_view causa ambigüedaden algunos casos | Se evitó haciéndola una plantilla |
[editar]Véase también
Construye una cadena basic_string (función miembro pública) | |
Asigna valores a la cadena (función miembro pública) |