std::multis...iset::crend(3)

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

✨ NAME ✨

okay bestie, the name on this page is std::multiset::rend,std::multiset::crend - std::multiset::rend,std::multiset::crend, and that’s literally the whole NAME line. iconic. this is from the C++ Standard Libary manual πŸ’–

πŸ¦‹ Synopsis πŸ¦‹

          reverse_iterator rend();                       (1) (noexcept since
       C++11)
          const_reverse_iterator rend() const;           (2) (noexcept since
       C++11)
          const_reverse_iterator crend() const noexcept; (3) (since C++11)

so what does it do? it returns a reverse iterator to the element following the last element of the reversed multiset. it corresponds to the element preceding the first element of the non-reversed multiset. this element acts as a placeholder, and attempting to access it results in undefined behavior. 🫢

⚠️ warning: that placeholder is not for touching β€” attempting to access it results in undefined behavior. periodt.

there’s also this diagram reference on the page: range-rbegin-rend.svg 🌈

πŸ’… Parameters πŸ’…

(none) β€” literally no parameters, she takes nothing 😌

πŸŽ€ Return value πŸŽ€

Reverse iterator to the element following the last element. that’s the whole vibe πŸ’«

⭐ Complexity ⭐

Constant. yes bestie, constant β€” she’s fast like that ✨

🌸 Notes 🌸

real talk: because both iterator and const_iterator are constant iterators (and may in fact be the same type), it is not possible to mutate the elements of the container through an iterator returned by any of these member functions. no cap, the elements are not yours to change through these iterators πŸ’€

also: libc++ backports crend() to C++98 mode. cute backport moment 🧚

πŸ“ Example πŸ“

the page says // Run this code β€” here’s the code, bestie:

        #include <iostream>
        #include <set>

        int main()
        {
            std::multiset<unsigned> rep{1, 2, 3, 4, 1, 2, 3, 4};

            for (auto it = rep.crbegin(); it != rep.crend(); ++it)
            {
                for (auto n = *it; n > 0; --n)
                    std::cout << "⏼" << ' ';
                std::cout << '\n';
            }
        }

πŸ‘‘ Output πŸ‘‘

        ⏼ ⏼ ⏼ ⏼
        ⏼ ⏼ ⏼ ⏼
        ⏼ ⏼ ⏼
        ⏼ ⏼ ⏼
        ⏼ ⏼
        ⏼ ⏼
        ⏼
        ⏼

πŸ”₯ See also πŸ”₯

  • rbegin β€” returns a reverse iterator to the beginning
  • crbegin β€” (public member function) (C++11)
  • rend β€” returns a reverse end iterator for a container or array
  • crend β€” (function template) (C++14)

source/version: http://cppreference.com, dated 2024.06.10, page std::multis...iset::crend(3) β€” byeee bestie, go iterate in reverse responsibly πŸ’…πŸ«Ά

πŸ“¦ where this page comes from