std::list<T,Allocator>::append_range - cppreference.com

From cppreference.com

template< container-compatible-range<T> R > void append_range( R&& rg );

(since C++23)

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

No iterators or references are invalidated.

Each iterator in rg is dereferenced exactly once.

Parameters

Complexity

Linear in size of rg. The number of calls to the constructor of T is exactly equal to the std::ranges::size(rg)).

Exceptions

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) Ranges-aware construction and insertion

Example

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

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

See also

adds a range of elements to the beginning
(public member function)
inserts a range of elements
(public member function)
adds an element to the end
(public member function)
constructs an element in-place at the end
(public member function)