std::basic_string<CharT,Traits,Allocator>::insert
basic_string& insert( size_type index, size_type count, CharT ch );
|
(1) | (constexpr desde C++20) |
basic_string& insert( size_type index, const CharT* s );
|
(2) | (constexpr desde C++20) |
basic_string& insert( size_type index, const CharT* s, size_type count );
|
(3) | (constexpr desde C++20) |
basic_string& insert( size_type index, const basic_string& str );
|
(4) | (constexpr desde C++20) |
basic_string& insert( size_type index, const basic_string& str,
size_type s_index, size_type count );
|
(5) | (hasta C++14) |
basic_string& insert( size_type index, const basic_string& str,
size_type s_index, size_type count = npos );
|
(desde C++14) (constexpr desde C++20) |
|
iterator insert( iterator pos, CharT ch );
|
(6) | (hasta C++11) |
iterator insert( const_iterator pos, CharT ch );
|
(desde C++11) (constexpr desde C++20) |
|
void insert( iterator pos, size_type count, CharT ch );
|
(7) | (hasta C++11) |
iterator insert( const_iterator pos, size_type count, CharT ch );
|
(desde C++11) (constexpr desde C++20) |
|
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last );
|
(8) | (hasta C++11) |
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
|
(desde C++11) (constexpr desde C++20) |
|
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
|
(9) | (desde C++11) (constexpr desde C++20) |
template< class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t );
|
(10) | (desde C++17) (constexpr desde C++20) |
template< class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t,
size_type t_index, size_type count = npos );
|
(11) | (desde C++17) (constexpr desde C++20) |
Inserta caracteres en la cadena.
count copias del carácter ch en la posición index.s en la posición index. La longitud de la cadena se determina mediante el primer carácter nulo usando Traits::length(s). [s, s + count) en la posición index. El rango puede contener caracteres nulos.str en la posición index.str.substr(s_index, count) en la posición index.ch antes del carácter apuntado por pos.count copias del carácter ch antes del elemento (si existe) apuntado por pos.[first, last) antes del elemento (si existe) apuntado por pos, como si fuera mediante insert(pos - begin(), basic_string(first, last, get_allocator())).
|
Esta sobrecarga no participa en la resolución de sobrecargas si |
(desde C++11) |
ilist antes del elemento (si existe) apuntado por pos.t a una vista de cadena sv como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, luego inserta los elementos de sv antes del elemento (si existe) apuntado por index, como si fuera mediante insert(index, sv.data(), sv.size()).std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const StringViewLike&, const CharT*> es false.t a una vista de cadena sv como si fuera mediante std::basic_string_view<CharT, Traits> sv = t;, luego inserta, antes del elemento (si existe) apuntado por index, los caracteres de la subvista [t_index, t_index + count) de sv.
- Si la subvista solicitada se extiende más allá del final de
sv, o sicount == npos, la subvista resultante es[t_index,sv.size()). - Si
t_index > sv.size(), o siindex > size(), se lanza std::out_of_range.
std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> es true y std::is_convertible_v<const StringViewLike&, const CharT*> es false.Si pos no es un iterador válido en *this, el comportamiento no está definido.
Parámetros
| index | - | posición en la que se insertará el contenido |
| pos | - | iterador antes del cual se insertarán los caracteres |
| ch | - | carácter a insertar |
| count | - | número de caracteres a insertar |
| s | - | puntero a la cadena de caracteres a insertar |
| str | - | cadena a insertar |
| first, last | - | rango que define los caracteres a insertar |
| s_index | - | posición del primer carácter en str a insertar |
| ilist | - | std::initializer_list para insertar los caracteres desde |
| t | - | objeto (convertible a std::basic_string_view ) para insertar los caracteres desde |
| t_index | - | posición del primer carácter en t a insertar |
| Requisitos de tipo | ||
-
InputIt
debe cumplir con los requisitos de
LegacyInputIterator
.
|
||
Valor de retorno
Excepciones
En todos los casos, lanza std::length_error si size ( ) + ins_count > max_size ( ) donde ins_count es el número de caracteres que serán insertados.
|
En todos los casos, si std:: allocator_traits < Allocator > :: allocate lanza una excepción, esta es relanzada. |
(desde C++20) |
Si se lanza una excepción por cualquier razón, esta función no tiene efecto ( strong exception safety guarantee ).
Ejemplo
#include <cassert> #include <iterator> #include <string> using namespace std::string_literals; int main() { std::string s = "xmplr"; // insert(size_type index, size_type count, char ch) s.insert(0, 1, 'E'); assert("Exmplr" == s); // insert(size_type index, const char* s) s.insert(2, "e"); assert("Exemplr" == s); // insert(size_type index, string const& str) s.insert(6, "a"s); assert("Exemplar" == s); // insert(size_type index, string const& str, // size_type s_index, size_type count) s.insert(8, " is an example string."s, 0, 14); assert("Exemplar is an example" == s); // insert(const_iterator pos, char ch) s.insert(s.cbegin() + s.find_first_of('n') + 1, ':'); assert("Exemplar is an: example" == s); // insert(const_iterator pos, size_type count, char ch) s.insert(s.cbegin() + s.find_first_of(':') + 1, 2, '='); assert("Exemplar is an:== example" == s); // insert(const_iterator pos, InputIt first, InputIt last) { std::string seq = " string"; s.insert(s.begin() + s.find_last_of('e') + 1, std::begin(seq), std::end(seq)); assert("Exemplar is an:== example string" == s); } // insert(const_iterator pos, std::initializer_list<char>) s.insert(s.cbegin() + s.find_first_of('g') + 1, {'.'}); assert("Exemplar is an:== example string." == s); }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 7 | C++98 | la sobrecarga (8) hacía referencia a una sobrecarga inexistente | hace referencia correctamente a la sobrecarga (4) |
| LWG 847 | C++98 | no existía garantía de seguridad de excepciones | se añadió garantía de seguridad de excepciones fuerte |
| LWG 2946 | C++17 | la sobrecarga (10) causaba ambigüedad en algunos casos | se evitó convirtiéndola en plantilla |
Véase también
|
(C++23)
|
inserta un rango de caracteres
(función miembro pública) |
|
añade caracteres al final
(función miembro pública) |
|
|
añade un carácter al final
(función miembro pública) |