std::ranges::views::all, std::ranges::views::all_t
来自cppreference.com
定义于头文件 <ranges>
|
||
inline constexpr /*unspecified*/ all = /*unspecified*/; |
(1) | (C++20 起) |
template <ranges::viewable_range R> using all_t = decltype(views::all(std::declval<R>())); |
(2) | (C++20 起) |
1) 返回包含其
range
参数的所有元素的 view
的范围适配器对象(亦为范围适配器闭包对象)。表达式 views::all(e) 表达式等价于:
- 隐式转换 e 为 std::decay_t<decltype((e))> 纯右值,若结果类型实现
view
。 - 否则为 std::ranges::ref_view{e} ,若该表达式为良构。
- 否则为 std::ranges::owning_view{e} 。
表达式等价
表达式 e 表达式等价于表达式 f ,若 e 与 f 拥有相同效果,均为潜在抛出或均非潜在抛出(即 noexcept(e) == noexcept(f) ),且均为常量子表达式或均非常量子表达式。
示例
运行此代码
#include <ranges> #include <vector> #include <iostream> #include <type_traits> int main() { std::vector<int> v{0,1,2,3,4,5}; for(int n : std::views::all(v) | std::views::take(2) ) { std::cout << n << ' '; } static_assert(std::is_same< decltype(std::views::single(42)), std::ranges::single_view<int> >{}); static_assert(std::is_same< decltype(std::views::all(v)), std::ranges::ref_view<std::vector<int, std::allocator<int>>> >{}); int a[]{1,2,3,4}; static_assert(std::is_same< decltype(std::views::all(a)), std::ranges::ref_view<int [4]> >{}); static_assert(std::is_same< decltype(std::ranges::subrange{std::begin(a)+1, std::end(a)-1}), std::ranges::subrange<int*, int*, std::ranges::subrange_kind(1)> >{}); }
输出:
0 1
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P2415R2 | C++20 | views::all 对非 view 右值 range 返回 subrange
|
对其返回 owning_view
|
参阅
无元素的空 view (类模板) (变量模板) | |
含有具有指定值的单个元素的 view (类模板) (定制点对象) |