[ Web Proxy ]
URL:
Viewing: http://ru.cppreference.com/cpp/string/basic_string/insert_range [Back]  [Original]

std::basic_string<CharT,Traits,Allocator>::insert_range cppreference.com
cppreference.com

std::basic_string<CharT,Traits,Allocator>::insert_range

cppreference.com
 
C++
(C++20)
(C++20)
(C++11)
(C++20)
/
(C++11)
(C++11)
(C++11)
(C++17)
 
 
std::basic_string
-
(C++17)
,
/
( C++20)( C++20)( C++20)( C++20)( C++20)(C++20)
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
 
<tbody> </tbody>
template< container-compatible-range<CharT> R > constexpr iterator insert_range( const_iterator pos, R&& rg );
( C++23)

rg ( ), pos.

return insert(pos - begin(),
    std::basic_string(
        std::from_range,
        std::forward<R>(rg),
        get_allocator())
);

pos *this, .

pos ,
rg no section name

, pos, , rg .

rg.

std::allocator_traits<Allocator>::allocate , .

size() > max_size(), std::length_error.

- , ( ).

__cpp_lib_containers_ranges 202202L (C++23) -, no section name

#include <cassert>
#include <iterator>
#include <string>

int main()
{
    const auto source = {'l', 'i', 'b', '_'};
    std::string target{"__cpp_containers_ranges"};
    //                        ^ 
    //                           

    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");
    //                      ^^^^
}


(public -) []

Web Proxy Viewer  |  New URL  |  Original Page