std::ranges::ref_view

来自cppreference.com
< cpp‎ | ranges
定义于头文件 <ranges>
template<ranges::range R>

    requires std::is_object_v<R>

class ref_view : public ranges::view_interface<ref_view<R>>
(C++20 起)

ref_­view 是某个其他 range 的元素的 view 。它包装到该 range 的引用。

目录

[编辑] 数据成员

std::ranges::ref_view::r_

R* r_ = nullptr; /* exposition-only */

指向被引用范围的指针

[编辑] 成员函数

std::ranges::ref_view::ref_view

constexpr ref_view() noexcept = default;
(1)
template<__NotSameAs<ref_view> T>

    requires std::convertible_to<T, R&> && requires { _FUN(std::declval<T>()); }

constexpr ref_view(T&& t);
(2)
1)nullptr 初始化 r_ 。默认初始化的 ref_view 不引用 range
2)std::addressof(static_­cast<R&>(std::forward<T>(t))) 初始化 r_

名称 __NotSameAs_FUN 仅为说明。 __NotSameAs<T, U> 当且仅当 !std::same_as<std::remove_cvref_t<T>, std::remove_cvref_t<U>> 才得到满足。函数 _FUN 声明为 void _FUN(R&); void _FUN(R&&) = delete;

参数

t - 要引用的范围

std::ranges::rev_view::base

constexpr R& base() const;

等价于 return *r_;

std::ranges::ref_view::begin

constexpr ranges::iterator_t<R> begin() const;

等价于 return ranges::begin(*r_);

std::ranges::ref_view::end

constexpr ranges::sentinel_t<R> end() const;

等价于 return ranges::end(*r_);

std::ranges::ref_view::empty

constexpr bool empty() const
    requires requires { ranges::empty(*r_); };

等价于 return ranges::empty(*r_);

std::ranges::ref_view::size

constexpr auto size() const

    requires ranges::sized_range<R>

{ return ranges::size(*r_); }

std::ranges::ref_view::data

constexpr auto data() const

    requires ranges::contiguous_range<R>

{ return ranges::data(*r_); }

[编辑] 非成员函数

begin, end(std::ranges::ref_view)

friend constexpr ranges::iterator_t<R> begin(ref_view r);
(1)
friend constexpr ranges::sentinel_t<R> end(ref_view r);
(2)
1) 等价于 return r.begin();
2) 等价于 return r.end();

这些函数对通常无限定有限定查找不可见,而且只能在 std::ranges::ref_view<R> 为参数的关联类时由参数依赖查找找到。

[编辑] 推导指引

template<class R>
ref_view(R&) -> ref_view<R>;

[编辑] 示例

[编辑] 参阅

可复制构造 (CopyConstructible) 可复制赋值 (CopyAssignable) 的引用包装器
(类模板) [编辑]
包含 range 的所有元素的 view
(别名模板) (范围适配器对象) [编辑]