std::ranges::subrange

< cpp‎ | ranges
定义于头文件 <ranges>
template<

  std::input_or_output_iterator I,
  std::sentinel_for<I> S = I,
  ranges::subrange_kind K = std::sized_sentinel_for<S, I> ?
    ranges::subrange_kind::sized : ranges::subrange_kind::unsized
>
  requires (K == ranges::subrange_kind::sized || !std::sized_sentinel_for<S, I>)

class subrange : public ranges::view_interface<subrange<I, S, K>>
(C++20 起)

subrange 类模板组合一个迭代器与一个哨位到单个 view 中。

另外, subrange 凡在最后的模板形参为 subrange_kind​::​sized 时(在 sized_sentinel_for<S, I> 得到满足或显式传递大小为构造函数参数时发生)为 sized_range

辅助模板

template<std::input_or_output_iterator I, std::sentinel_for<I> S

         ranges::subrange_kind K>

inline constexpr bool enable_borrowed_range<ranges::subrange<I, S, K>> = true;

std::ranges::enable_borrowed_range 的此特化使得 subrange 满足 borrowed_range

示例

#include <ranges>
 
void mutate_map_values(std::multimap<K,V>& m, K k) {
    using namespace std::ranges;
    for (auto& [_, v] : subrange(m.equal_range(k))) {
        mutate(v);
    }
}