std::ranges:: views:: elements, std::ranges:: elements_view
|
定义于头文件
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
|
(1) | (C++20 起) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (C++20 起) |
|
调用签名
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 见下文 */
|
(C++20 起) | |
|
辅助概念
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23 前)
( 仅用于阐释* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23 起)
( 仅用于阐释* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept returnable
-
element
=
|
(4) | ( 仅用于阐释* ) |
views::elements
的特化都是一个
范围适配器对象
。表达式
views
::
elements
<
M
>
(
e
)
与
elements_view
<
views::
all_t
<
decltype
(
(
e
)
)
>
, M
>
{
e
}
对任何合适的子表达式
e
和常量表达式
M
均构成
表达式等价
。
elements_view
在底层视图
V
满足相应概念时,实现以下概念模型:
random_access_range
、
bidirectional_range
、
forward_range
、
input_range
、
common_range
以及
sized_range
。
目录 |
数据成员
| 成员 | 描述 |
V
base_
|
底层视图
( 仅用于说明的成员对象* ) |
成员函数
构造一个
elements_view
(公开成员函数) |
|
|
返回底层(适配的)视图的副本
(公开成员函数) |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回指向末尾位置的迭代器或哨兵
(公开成员函数) |
|
返回元素数量,仅当底层(适配的)范围满足
sized_range
时提供
(公开成员函数) |
|
|
(C++26)
|
返回生成的
approximately_sized_range
的近似大小
(公开成员函数) |
继承自 std::ranges::view_interface |
|
返回派生视图是否为空,仅当它满足
sized_range
或
forward_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
|
(C++23)
|
返回指向范围起始的常量迭代器
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
(C++23)
|
返回范围常量迭代器的哨兵
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图是否非空,仅当
ranges::empty
适用于它时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图中的首个元素,仅当它满足
forward_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图中的最后一个元素,仅当它满足
bidirectional_range
和
common_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图中的第
n
个元素,仅当它满足
random_access_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
嵌套类
|
迭代器类型
( 仅用于说明的成员类模板* ) |
|
|
哨兵类型
( 仅用于说明的成员类模板* ) |
辅助模板
|
template
<
class
T,
std::
size_t
N
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
elements_view
<
T, N
>>
=
|
(C++20 起) | |
此
ranges::enable_borrowed_range
的特化使得当底层视图满足
borrowed_range
时,
elements_view
也满足该概念。
示例
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
输出:
1 2 3 4 5 A B C D E α β γ δ ε
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
从未是
borrowed_range
|
当底层视图是
borrowed_range
时
它才是
borrowed_range
|
| LWG 3502 | C++20 |
可能从
elements_view
获取悬垂引用
|
禁止此类用法 |
参见
|
(C++20)
|
接受由类对值组成的
view
,生成每个对中第一个元素的
view
(类模板) (范围适配器对象) |
接受由类对值组成的
view
,生成每个对中第二个元素的
view
(类模板) (范围适配器对象) |
|
|
(C++23)
|
由被适配视图的对应元素引用元组组成的
view
(类模板) (定制点对象) |
由被适配视图的对应元素应用变换函数的结果组成的
view
(类模板) (定制点对象) |
|
|
类BLAS的valarray切片:起始索引、长度、步长
(类) |