table of contents
std::basic_string::insert_range(3) | C++ Standard Libary | std::basic_string::insert_range(3) |
NAME¶
std::basic_string::insert_range - std::basic_string::insert_range
Synopsis¶
template< container-compatible-range<CharT> R >
(since C++23)
constexpr iterator insert_range( const_iterator pos, R&& rg );
Inserts characters from the range rg before the element (if any) pointed by
pos.
Equivalent to
return insert(pos - begin(),
std::basic_string(
std::from_range,
std::forward<R>(rg),
get_allocator())
);
If pos is not a valid iterator on *this, the behavior is undefined.
Parameters¶
pos - iterator before which the characters will be inserted
rg - a container compatible range
Return value¶
An iterator which refers to the first inserted character, or pos
if no characters
were inserted because rg was empty.
Complexity¶
Linear in size of rg.
Exceptions¶
If std::allocator_traits<Allocator>::allocate throws an exception, it is rethrown.
If the operation would result in size() > max_size(), throws
std::length_error.
If an exception is thrown for any reason, this function has no effect (strong
exception safety guarantee).
Notes¶
Feature-test macro Value Std Feature
__cpp_lib_containers_ranges 202202L (C++23) member functions that accept
container
compatible range
Example¶
// Run this code
#include <cassert>
#include <iterator>
#include <string>
int main()
{
const auto source = {'l', 'i', 'b', '_'};
std::string target{"__cpp_containers_ranges"};
// ^insertion will occur
// before this 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");
// ^^^^
}
See also¶
insert inserts characters
(public member function)
2024.06.10 | http://cppreference.com |