Scroll to navigation

std::vector::append_range(3) C++ Standard Libary std::vector::append_range(3)

NAME

std::vector::append_range - std::vector::append_range

Synopsis


template< container-compatible-range<T> R > (since C++23)
constexpr void append_range( R&& rg );


Inserts copies of elements from the range rg before end(), in non-reversing order.


If after the operation the new size() is greater than old capacity() a reallocation
takes place, in which case all iterators (including the end() iterator) and all
references to the elements are invalidated. Otherwise only the end() iterator is
invalidated.


Each iterator in rg is dereferenced exactly 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 vector from *ranges::begin(rg). Also, T must be
MoveInsertable into vector. Otherwise, the behavior is undefined.

Return value


(none)

Complexity


If reallocation happens, linear in the number of elements of the resulting vector;
otherwise, linear in the number of elements inserted plus the distance to the end().

Exceptions


If an exception is thrown other than by the copy constructor, move constructor,
assignment operator, or move assignment operator of T or by any InputIterator
operation there are no effects. If an exception is thrown while inserting a single
element at the end and T is CopyInsertable or
std::is_nothrow_move_constructible_v<T> is true, there are no effects. Otherwise, if
an exception is thrown by the move constructor of a non-CopyInsertable T, the
effects are unspecified.

Notes


Feature-test macro Value Std Feature
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware construction and insertion

Example

// Run this code


#include <algorithm>
#include <cassert>
#include <vector>
#include <list>


int main()
{
auto head = std::vector{1, 2, 3, 4};
const auto tail = std::list{-5, -6, -7};
#ifdef __cpp_lib_containers_ranges
head.append_range(tail);
#else
head.insert(head.end(), tail.cbegin(), tail.cend());
#endif
assert(std::ranges::equal(head, std::vector{1, 2, 3, 4, -5, -6, -7}));
}

See also


insert_range inserts a range of elements
(C++23) (public member function)
push_back adds an element to the end
(public member function)
emplace_back constructs an element in-place at the end
(C++11) (public member function)

2024.06.10 http://cppreference.com