Spec-Zone.ru › C++

std::inplace_vector<T,N>::try_append_range

template< container-compatible-range<T> R >
constexpr std::ranges::borrowed_iterator_t<R> try_append_range( R&& rg );
(since C++26)
(removed in C++26)

Appends copies of initial elements in rg before end(), until all elements are inserted or the internal storage is exhausted (i.e. size() == capacity() is true).

All iterators and references remain valid. The end() iterator is invalidated.

Each iterator in rg is dereferenced at most once.

Parameters

rg - a container compatible range, that is, an input_range whose elements are convertible to T
Type requirements
-T must be EmplaceConstructible into inplace_vector from *ranges::begin(rg). Otherwise, the behavior is undefined.

Return value

An iterator pointing to the first element of rg that was not inserted into *this, or ranges::end(rg) if no such element exists.

Complexity

Linear in the number of elements inserted.

Exceptions

Any exception thrown by initialization of inserted element.

inplace_vector provides the basic exception safety guarantee, i.e., all elements of the container before the call are preserved, and all already inserted elements (before the exception, if any) are also preserved.

Notes

Feature-test macro Value Std Feature
__cpp_lib_inplace_vector 202603L (C++26) Removed try_append_range

Example

#include <cassert>
#include <initializer_list>
#include <inplace_vector>

int main()
{
#if defined(__cpp_lib_inplace_vector) and (__cpp_lib_inplace_vector < 202603L)
    using I = std::inplace_vector<int, 8>;
    auto nums = I{1, 2, 3};
    const auto rg = {-1, -2, -3};

    auto it = nums.try_append_range(rg);
    assert(nums.size() == 6);
    assert((nums == I{1, 2, 3, -1, -2, -3}));
    assert(it == rg.end());

    it = nums.try_append_range(rg);
    assert(nums.size() == 8);
    assert((nums == I{1, 2, 3, -1, -2, -3, -1, -2}));
    assert(it == rg.begin() + 2);
#endif
}

See also

append_range
adds a range of elements to the end
(public member function)
push_back
adds an element to the end
(public member function)
try_push_back
tries to add an element to the end
(public member function)
unchecked_push_back
unconditionally adds an element to the end
(public member function)
emplace_back
constructs an element in-place at the end
(public member function)
try_emplace_back
tries to construct an element in-place at the end
(public member function)
unchecked_emplace_back
unconditionally constructs an element in-place at the end
(public member function)
pop_back
removes the last element
(public member function)
back_inserter
creates a std::back_insert_iterator of type inferred from the argument
(function template)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/inplace_vector/try_append_range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API