std::queue::push_range(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

std::queue::push_range πŸ’…

Ok bestie, this is the std::queue::push_range(3) page from the C++ Standard Library, and it’s giving very β€œnew C++23 feature just dropped” energy. 🫢

✨ NAME ✨

  • std::queue::push_range β€” literally std::queue::push_range. That’s the whole name, bestie.

πŸ¦‹ Synopsis πŸ¦‹

template< container-compatible-range<value_type> R >  (since C++23)
void push_range( R&& rg );

Inserts a copy of each element of rg in queue, as if by:

  • c.append_range(std::forward<R>(rg)) if that is a valid expression (i.e. the underlying container c has an appropriate append_range member function), or
  • ranges::copy(rg, std::back_inserter(c)) otherwise.

Each iterator in the range rg is dereferenced exactly once. No cap. πŸŽ€

🌸 Parameters 🌸

  • rg β€” a container compatible range, that is, an input_range whose elements are convertible to T.

πŸ’– Return value πŸ’–

  • (none) β€” yeah, it gives nothing back, and that’s the vibe.

πŸ”₯ Complexity πŸ”₯

Identical to the complexity of c.append_range or ranges::copy(rg, std::back_inserter(c)) (depending on what function is used internally).

⭐ Notes ⭐

Feature-test macro time, bestie:

  • __cpp_lib_containers_ranges β€” value 202202L, std (C++23), feature: Ranges-aware construction and insertion.

🧚 Example 🧚

// Run this code

#include <algorithm>
#include <iostream>
#include <ranges>
#include <queue>

template<typename Adaptor>
requires (std::ranges::input_range<typename Adaptor::container_type>)
void println(auto, const Adaptor& adaptor)
{
    struct Container : Adaptor // gain access to protected Adaptor::Container c;
    {
        auto const& container() const { return this->c; }
    };

    for (auto const& elem : static_cast<const Container&>(adaptor).container())
        std::cout << elem << ' ';
    std::cout << '\n';
}

int main()
{
    std::queue<int> adaptor;
    const auto rg = {1, 3, 2, 4};

#ifdef __cpp_lib_containers_ranges
    adaptor.push_range(rg);
#else
    std::ranges::for_each(rg, [&adaptor](auto e){ adaptor.push(e); });
#endif

    println("{}", adaptor);
}

🌈 Output 🌈

1 3 2 4

πŸ‘‘ See also πŸ‘‘

  • push β€” inserts element at the end (public member function). Slay.

That’s the whole page, bestie 🫢 β€” source: http://cppreference.com, version/date vibes: 2024.06.10, and the manual is std::queue::push_range(3). Periodt. πŸ’…

πŸ“¦ where this page comes from