std::ranges..._view::size(3)

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

πŸ’– NAME πŸ’–

std::ranges::take_view::size β€” std::ranges::take_view::size. bestie, yes, the NAME section really says it twice, and that is iconic of it. This is the page from the C++ Standard Libary manual, page std::ranges..._view::size(3), and it's giving β€œhow many elements are we actually keeping?” energy. Periodt. πŸ’…


🌸 Synopsis 🌸

Okay so you've got two constexpr overloads, both since C++20:

  • constexpr auto size() requires ranges::sized_range<V>; β€” (1) (since C++20)
  • constexpr auto size() const requires ranges::sized_range<const V>; β€” (2) (since C++20)

Returns the number of elements, which is the smaller of the count passed to the constructor and the size of the underlying view. No cap, that's the whole vibe. 🫢

Let base_ be the underlying view, count_ be the number passed to the constructor (0 if default constructed). Equivalent to

auto n = ranges::size(base_);
return ranges::min(n, static_cast<decltype(n)>(count_));

🫢 Parameters 🫢

(none) β€” literally no parameters, bestie. None. Zero. The vibe check is passed by the object itself. πŸŽ€


✨ Return value ✨

The number of elements. That's it. That's the tea. πŸ“


🧚 Example 🧚

// Run this code

#include <iostream>
#include <ranges>

int main()
{
    constexpr int arr[]{1, 2, 3};

    for (int i = 0; i != 6; ++i)
    {
        const auto tv = std::ranges::take_view{arr, i};
        std::cout << tv.size() << ' ';
    }
    std::cout << '\n';
}

Output:

0 1 2 3 3 3

🌈 See also 🌈

  • ranges::size β€” returns an integer equal to the size of a range (C++20) (customization point object).
  • ranges::ssize β€” returns a signed integer equal to the size of a range (C++20) (customization point object).

source: cppreference.com Β· date: 2024.06.10 Β· page: std::ranges..._view::size(3) β€” okay bestie, that's the whole page, go get that size and stan a sized range for me πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from