std::basic_string<CharT,Traits,Allocator>::insert
| basic_string& insert( size_type index, size_type count, CharT ch ); |
(1) | (constexpr seit C++20) |
| basic_string& insert( size_type index, const CharT* s ); |
(2) | (constexpr seit C++20) |
| basic_string& insert( size_type index, const CharT* s, size_type count ); |
(3) | (constexpr seit C++20) |
| basic_string& insert( size_type index, const basic_string& str ); |
(4) | (constexpr seit C++20) |
| (5) | ||
basic_string& insert( size_type index, const basic_string& str, size_type s_index, size_type count ); |
(bis C++14) | |
| basic_string& insert( size_type index, const basic_string& str, size_type s_index, size_type count = npos ); |
(seit C++14) (constexpr seit C++20) |
|
| (6) | ||
iterator insert( iterator pos, CharT ch ); |
(bis C++11) | |
| iterator insert( const_iterator pos, CharT ch ); |
(seit C++11) (constexpr seit C++20) |
|
| (7) | ||
void insert( iterator pos, size_type count, CharT ch ); |
(bis C++11) | |
| iterator insert( const_iterator pos, size_type count, CharT ch ); |
(seit C++11) (constexpr seit C++20) |
|
| (8) | ||
template< class InputIt > void insert( iterator pos, InputIt first, InputIt last ); |
(bis C++11) | |
| template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); |
(seit C++11) (constexpr seit C++20) |
|
| iterator insert( const_iterator pos, std::initializer_list<CharT> ilist ); |
(9) | (seit C++11) (constexpr seit C++20) |
| template< class StringViewLike > basic_string& insert( size_type index, const StringViewLike& t ); |
(10) | (seit C++17) (constexpr seit C++20) |
| template< class StringViewLike > basic_string& insert( size_type index, const StringViewLike& t, |
(11) | (seit C++17) (constexpr seit C++20) |
Fügt Zeichen in die Zeichenkette ein.
[s, s + count) an der Position index ein. Der Bereich kann Nullzeichen enthalten.[first, last) vor dem Element (falls vorhanden) ein, auf das pos zeigt, als ob durch insert(pos - begin(), basic_string(first, last, get_allocator())).|
Diese Überladung nimmt nicht an der Überladungsauflösung teil, wenn |
(seit C++11) |
std::basic_string_view<CharT, Traits>> true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.
[t_index, t_index + count) von sv.- Wenn die angeforderte Teilansicht über das Ende von sv hinausgeht oder wenn count == npos, ist die resultierende Teilansicht
[t_index,sv.size()). - Wenn t_index > sv.size() oder wenn index > size(), wird std::out_of_range ausgelöst.
std::basic_string_view<CharT, Traits>> true ist und std::is_convertible_v<const StringViewLike&, const CharT*> false ist.
Wenn pos kein gültiger Iterator für *this ist, ist das Verhalten undefiniert.
Inhalt |
[edit] Parameter
| index | - | Position, an der der Inhalt eingefügt wird |
| pos | - | Iterator, vor dem die Zeichen eingefügt werden |
| ch | - | einzufügendes Zeichen |
| zählt | - | Anzahl der einzufügenden Zeichen |
| s | - | Zeiger auf die einzufügende Zeichenkette |
| str | - | einzufügende Zeichenkette |
| first, last | - | Bereich, der die einzufügenden Zeichen definiert |
| s_index | - | Position des ersten Zeichens in str, das eingefügt werden soll |
| ilist | - | std::initializer_list, aus der die Zeichen eingefügt werden sollen |
| t | - | Objekt (konvertierbar zu std::basic_string_view), aus dem die Zeichen eingefügt werden sollen |
| t_index | - | Position des ersten Zeichens in t, das eingefügt werden soll |
| Typanforderungen | ||
-InputIt muss die Anforderungen von LegacyInputIterator erfüllen. | ||
[edit] Rückgabewert
[edit] Ausnahmen
In allen Fällen wird std::length_error ausgelöst, wenn size() + ins_count > max_size(), wobei ins_count die Anzahl der einzufügenden Zeichen ist.
|
In allen Fällen wird eine Ausnahme ausgelöst, wenn std::allocator_traits<Allocator>::allocate eine Ausnahme auslöst, wird diese erneut ausgelöst. |
(seit C++20) |
Wenn aus irgendeinem Grund eine Ausnahme ausgelöst wird, hat diese Funktion keine Auswirkungen (starkes Ausnahmesicherheitsgarantie).
[edit] Beispiel
#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); }
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 7 | C++98 | Überladung (8) verwies auf eine nicht existierende Überladung | verweist korrekt auf Überladung (4) |
| LWG 847 | C++98 | Es gab keine Ausnahmesicherheitsgarantie | starke Ausnahmesicherheitsgarantie hinzugefügt |
| LWG 2946 | C++17 | Überladung (10) verursachte in einigen Fällen Mehrdeutigkeit | vermieden durch die Erstellung als Template |
[edit] Siehe auch
| (C++23) |
fügt einen Bereich von Zeichen ein (public member function) |
| hängt Zeichen am Ende an (public member function) | |
| hängt ein Zeichen am Ende an (public member function) |