std::basic_string<CharT,Traits,Allocator>::insert
basic_string& insert( size_type index, size_type count, CharT ch );
|
(1) | (constexpr depuis C++20) |
basic_string& insert( size_type index, const CharT* s );
|
(2) | (constexpr depuis C++20) |
basic_string& insert( size_type index, const CharT* s, size_type count );
|
(3) | (constexpr depuis C++20) |
basic_string& insert( size_type index, const basic_string& str );
|
(4) | (constexpr depuis C++20) |
basic_string& insert( size_type index, const basic_string& str,
size_type s_index, size_type count );
|
(5) | (jusqu'à C++14) |
basic_string& insert( size_type index, const basic_string& str,
size_type s_index, size_type count = npos );
|
(depuis C++14) (constexpr depuis C++20) |
|
iterator insert( iterator pos, CharT ch );
|
(6) | (jusqu'à C++11) |
iterator insert( const_iterator pos, CharT ch );
|
(depuis C++11) (constexpr depuis C++20) |
|
void insert( iterator pos, size_type count, CharT ch );
|
(7) | (jusqu'à C++11) |
iterator insert( const_iterator pos, size_type count, CharT ch );
|
(depuis C++11) (constexpr depuis C++20) |
|
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last );
|
(8) | (jusqu'à C++11) |
template< class InputIt >
iterator insert( const_iterator pos, InputIt first, InputIt last );
|
(depuis C++11) (constexpr depuis C++20) |
|
iterator insert( const_iterator pos, std::initializer_list<CharT> ilist );
|
(9) | (depuis C++11) (constexpr depuis C++20) |
template< class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t );
|
(10) | (depuis C++17) (constexpr depuis C++20) |
template< class StringViewLike >
basic_string& insert( size_type index, const StringViewLike& t,
size_type t_index, size_type count = npos );
|
(11) | (depuis C++17) (constexpr depuis C++20) |
Insère des caractères dans la chaîne.
count copies du caractère ch à la position index.s à la position index. La longueur de la chaîne est déterminée par le premier caractère nul en utilisant Traits::length(s). [s, s + count) à la position index. La plage peut contenir des caractères nuls.str à la position index.str.substr(s_index, count) à la position index.ch avant le caractère pointé par pos.count copies du caractère ch avant l'élément (s'il existe) pointé par pos.[first, last) avant l'élément (s'il existe) pointé par pos, comme par insert(pos - begin(), basic_string(first, last, get_allocator())).
|
Cette surcharge ne participe pas à la résolution de surcharge si |
(depuis C++11) |
ilist avant l'élément (s'il existe) pointé par pos.t en une vue chaîne sv comme par std::basic_string_view<CharT, Traits> sv = t;, puis insère les éléments de sv avant l'élément (s'il existe) pointé par index, comme par insert(index, sv.data(), sv.size()).std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> est true et std::is_convertible_v<const StringViewLike&, const CharT*> est false.t en une vue chaîne sv comme par std::basic_string_view<CharT, Traits> sv = t;, puis insère, avant l'élément (s'il existe) pointé par index, les caractères de la sous-vue [t_index, t_index + count) de sv.
- Si la sous-vue demandée dépasse la fin de
sv, ou sicount == npos, la sous-vue résultante est[t_index,sv.size()). - Si
t_index > sv.size(), ou siindex > size(), std::out_of_range est levée.
std::is_convertible_v<const StringViewLike&,std::basic_string_view<CharT, Traits>> est true et std::is_convertible_v<const StringViewLike&, const CharT*> est false.Si pos n'est pas un itérateur valide sur *this, le comportement est indéfini.
Paramètres
| index | - | position à laquelle le contenu sera inséré |
| pos | - | itérateur avant lequel les caractères seront insérés |
| ch | - | caractère à insérer |
| count | - | nombre de caractères à insérer |
| s | - | pointeur vers la chaîne de caractères à insérer |
| str | - | chaîne à insérer |
| first, last | - | intervalle définissant les caractères à insérer |
| s_index | - | position du premier caractère dans str à insérer |
| ilist | - | std::initializer_list pour insérer les caractères depuis |
| t | - | objet (convertible en std::basic_string_view ) pour insérer les caractères depuis |
| t_index | - | position du premier caractère dans t à insérer |
| Exigences de type | ||
-
InputIt
doit satisfaire aux exigences de
LegacyInputIterator
.
|
||
Valeur de retour
Exceptions
Dans tous les cas, lance std::length_error si size ( ) + ins_count > max_size ( ) où ins_count est le nombre de caractères qui seront insérés.
|
Dans tous les cas, si std:: allocator_traits < Allocator > :: allocate lève une exception, elle est relancée. |
(depuis C++20) |
Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).
Exemple
#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); }
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement correct |
|---|---|---|---|
| LWG 7 | C++98 | la surcharge (8) faisait référence à une surcharge inexistante | fait référence correctement à la surcharge (4) |
| LWG 847 | C++98 | il n'y avait aucune garantie de sécurité d'exception | garantie de sécurité d'exception forte ajoutée |
| LWG 2946 | C++17 | la surcharge (10) provoquait une ambiguïté dans certains cas | évitée en la rendant template |
Voir aussi
|
(C++23)
|
insère une plage de caractères
(fonction membre publique) |
|
ajoute des caractères à la fin
(fonction membre publique) |
|
|
ajoute un caractère à la fin
(fonction membre publique) |