Files
2025-10-25 03:02:53 +03:00

4.1 KiB
Raw Permalink Blame History

[range.subrange.access]

25 Ranges library [ranges]

25.5 Range utilities [range.utility]

25.5.4 Sub-ranges [range.subrange]

25.5.4.3 Accessors [range.subrange.access]

🔗

constexpr I begin() const requires [copyable](concepts.object#concept:copyable "18.6Object concepts[concepts.object]")<I>;

1

#

Effects: Equivalent to: return begin_;

🔗

constexpr I begin() requires (![copyable](concepts.object#concept:copyable "18.6Object concepts[concepts.object]")<I>);

2

#

Effects: Equivalent to: return std::move(begin_);

🔗

constexpr S end() const;

3

#

Effects: Equivalent to: return end_;

🔗

constexpr bool empty() const;

4

#

Effects: Equivalent to: return begin_ == end_;

🔗

constexpr make-unsigned-like-t<iter_difference_t<I>> size() const requires (K == subrange_kind::sized);

5

#

Effects:

If StoreSize is true, equivalent to: return size_;

Otherwise, equivalent to: return to-unsigned-like(end_ - begin_);

🔗

constexpr subrange next(iter_difference_t<I> n = 1) const & requires [forward_iterator](iterator.concept.forward#concept:forward_iterator "24.3.4.11Concept forward_­iterator[iterator.concept.forward]")<I>;

6

#

Effects: Equivalent to:auto tmp = *this; tmp.advance(n);return tmp;

🔗

constexpr subrange next(iter_difference_t<I> n = 1) &&;

7

#

Effects: Equivalent to:advance(n);return std::move(*this);

🔗

constexpr subrange prev(iter_difference_t<I> n = 1) const requires [bidirectional_iterator](iterator.concept.bidir#concept:bidirectional_iterator "24.3.4.12Concept bidirectional_­iterator[iterator.concept.bidir]")<I>;

8

#

Effects: Equivalent to:auto tmp = *this; tmp.advance(-n);return tmp;

🔗

constexpr subrange& advance(iter_difference_t<I> n);

9

#

Effects: Equivalent to:if constexpr (bidirectional_iterator) {if (n < 0) { ranges::advance(begin_, n); if constexpr (StoreSize)size_ += to-unsigned-like(-n); return *this; }}auto d = n - ranges::advance(begin_, n, end_);if constexpr (StoreSize)size_ -= to-unsigned-like(d);return *this;

🔗

template<size_t N, class I, class S, subrange_kind K> requires ((N == 0 && [copyable](concepts.object#concept:copyable "18.6Object concepts[concepts.object]")<I>) || N == 1) constexpr auto get(const subrange<I, S, K>& r); template<size_t N, class I, class S, subrange_kind K> requires (N < 2) constexpr auto get(subrange<I, S, K>&& r);

10

#

Effects: Equivalent to:if constexpr (N == 0)return r.begin();elsereturn r.end();