std::basic_string<CharT,Traits,Allocator>:: insert_range
|
template
<
container-compatible-range
<
CharT
>
R
>
constexpr iterator insert_range ( const_iterator pos, R && rg ) ; |
(seit C++23) | |
Fügt Zeichen aus dem Bereich rg vor dem Element (falls vorhanden) ein, auf das pos zeigt.
Entspricht
return insert(pos - begin(), std::basic_string( std::from_range, std::forward<R>(rg), get_allocator()) );
Wenn pos kein gültiger Iterator auf * this ist, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| pos | - | Iterator vor dem die Zeichen eingefügt werden |
| rg | - | ein container compatible range |
Rückgabewert
Ein Iterator, der auf das erste eingefügte Zeichen verweist, oder pos falls keine Zeichen eingefügt wurden, weil rg leer war.
Komplexität
Linear in der Größe von rg .
Ausnahmen
Wenn std:: allocator_traits < Allocator > :: allocate eine Ausnahme wirft, wird diese erneut geworfen.
Falls die Operation dazu führen würde, dass
size()
den Wert von
max_size()
überschreitet, wird
std::length_error
ausgelöst.
Wenn aus irgendeinem Grund eine Exception ausgelöst wird, hat diese Funktion keine Wirkung ( strong exception safety guarantee ).
Hinweise
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_containers_ranges
|
202202L
|
(C++23) | Memberfunktionen, die container compatible range akzeptieren |
Beispiel
#include <cassert> #include <iterator> #include <string> int main() { const auto source = {'l', 'i', 'b', '_'}; std::string target{"__cpp_containers_ranges"}; // ^Einfügung erfolgt // vor dieser Position const auto pos = target.find("container"); assert(pos != target.npos); auto iter = std::next(target.begin(), pos); #ifdef __cpp_lib_containers_ranges target.insert_range(iter, source); #else target.insert(iter, source.begin(), source.end()); #endif assert(target == "__cpp_lib_containers_ranges"); // ^^^^ }
Siehe auch
|
fügt Zeichen ein
(öffentliche Elementfunktion) |