#
In addition to being available via inclusion of the <iterator> header, the function templates in [iterator.range] are available when any of the following headers are included:
template<class C> constexpr auto begin(C& c) noexcept(noexcept(c.begin() -> decltype(c.begin(); template<class C> constexpr auto begin(const C& c) noexcept(noexcept(c.begin() -> decltype(c.begin();
Returns: c.begin().
template<class C> constexpr auto end(C& c) noexcept(noexcept(c.end() -> decltype(c.end(); template<class C> constexpr auto end(const C& c) noexcept(noexcept(c.end() -> decltype(c.end();
Returns: c.end().
template<class T, size_t N> constexpr T* begin(T (&array)[N]) noexcept;
Returns: array.
template<class T, size_t N> constexpr T* end(T (&array)[N]) noexcept;
Returns: array + N.
template<class C> constexpr auto cbegin(const C& c) noexcept(noexcept(std::begin(c)) -> decltype(std::begin(c));
Returns: std​::​begin(c).
template<class C> constexpr auto cend(const C& c) noexcept(noexcept(std::end(c)) -> decltype(std::end(c));
Returns: std​::​end(c).
template<class C> constexpr auto rbegin(C& c) noexcept(noexcept(c.rbegin() -> decltype(c.rbegin(); template<class C> constexpr auto rbegin(const C& c) noexcept(noexcept(c.rbegin() -> decltype(c.rbegin();
Returns: c.rbegin().
template<class C> constexpr auto rend(C& c) noexcept(noexcept(c.rend() -> decltype(c.rend(); template<class C> constexpr auto rend(const C& c) noexcept(noexcept(c.rend() -> decltype(c.rend();
Returns: c.rend().
template<class T, size_t N> constexpr reverse_iterator<T*> rbegin(T (&array)[N]) noexcept;
Returns: reverse_iterator<T*>(array + N).
template<class T, size_t N> constexpr reverse_iterator<T*> rend(T (&array)[N]) noexcept;
Returns: reverse_iterator<T*>(array).
template<class E> constexpr reverse_iterator<const E*> rbegin(initializer_list<E> il) noexcept;
Returns: reverse_iterator<const E*>(il.end().
template<class E> constexpr reverse_iterator<const E*> rend(initializer_list<E> il) noexcept;
Returns: reverse_iterator<const E*>(il.begin().
template<class C> constexpr auto crbegin(const C& c) noexcept(noexcept(std::rbegin(c)) -> decltype(std::rbegin(c));
Returns: std​::​rbegin(c).
template<class C> constexpr auto crend(const C& c) noexcept(noexcept(c.crend() -> decltype(std::rend(c));
Returns: std​::​rend(c).
template<class C> constexpr auto size(const C& c) noexcept(noexcept(c.size() -> decltype(c.size();
Returns: c.size().
template<class T, size_t N> constexpr size_t size(const T (&array)[N]) noexcept;
Returns: N.
template<class C> constexpr auto ssize(const C& c) noexcept(noexcept(c.size() -> common_type_t<ptrdiff_t, make_signed_t<decltype(c.size()>;
Effects: Equivalent to: return static_cast<common_type_t<ptrdiff_t, make_signed_t<decltype(c.size()>(c.size();
template<class T, ptrdiff_t N> constexpr ptrdiff_t ssize(const T (&array)[N]) noexcept;
Returns: N.
template<class C> constexpr auto empty(const C& c) noexcept(noexcept(c.empty() -> decltype(c.empty();
Returns: c.empty().
template<class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept;
Returns: false.
template<class C> constexpr auto data(C& c) noexcept(noexcept(c.data() -> decltype(c.data(); template<class C> constexpr auto data(const C& c) noexcept(noexcept(c.data() -> decltype(c.data();
Returns: c.data().
template<class T, size_t N> constexpr T* data(T (&array)[N]) noexcept;
Returns: array.

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant