std::ranges:: views:: iota, std::ranges:: iota_view
|
定义于头文件
<ranges>
|
||
|
template
<
std::
weakly_incrementable
W,
std::
semiregular
Bound
=
std::
unreachable_sentinel_t
>
|
(1) | (C++20 起) |
|
namespace
views
{
inline
constexpr
/* 未指定 */
iota
=
/* 未指定 */
;
|
(2) | (C++20 起) |
|
调用签名
|
||
|
template
<
class
W
>
requires
/* 见下文 */
|
(C++20 起) | |
|
template
<
class
W,
class
Bound
>
requires
/* 见下文 */
|
(C++20 起) | |
目录 |
定制点对象
名称
views::iota
表示一个
定制点对象
,这是一个常量
函数对象
,属于字面量
semiregular
类类型。详情请参阅
定制点对象
。
数据成员
| 成员 | 定义 |
W
value_
|
起始值
( 说明专用成员对象* ) |
Bound
bound_
|
哨兵值,可能不可达
( 说明专用成员对象* ) |
成员函数
创建
iota_view
(公开成员函数) |
|
获取
iota_view
的起始迭代器
(公开成员函数) |
|
获取表示
iota_view
末尾的哨兵
(公开成员函数) |
|
检查
iota_view
是否为空(即迭代器与哨兵比较相等)
(公开成员函数) |
|
|
(optional)
|
获取
iota_view
的大小(仅在有限时提供)
(公开成员函数) |
继承自 std::ranges::view_interface |
|
|
(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>
的公开成员函数)
|
|
推导指引
嵌套类
|
迭代器类型
( 仅用于说明的成员类* ) |
|
当
iota_view
有界且
Bound
与
W
类型不同时使用的哨兵类型
( 仅用于说明的成员类* ) |
辅助模板
|
template
<
std::
weakly_incrementable
W,
std::
semiregular
Bound
>
constexpr bool ranges:: enable_borrowed_range < ranges :: iota_view < W, Bound >> = true ; |
(C++20 起) | |
此
ranges::
enable_borrowed_range
的特化使
iota_view
满足
borrowed_range
要求。
示例
#include <algorithm> #include <iostream> #include <ranges> struct Bound { int bound; bool operator==(int x) const { return x == bound; } }; int main() { for (int i : std::ranges::iota_view{1, 10}) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, 10)) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, Bound{10})) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1) | std::views::take(9)) std::cout << i << ' '; std::cout << '\n'; std::ranges::for_each(std::views::iota(1, 10), [](int i){ std::cout << i << ' '; }); std::cout << '\n'; }
输出:
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 4096 | C++20 |
views::iota
可能按原样复制
iota_view
|
已禁止 |
| P2325R3 | C++20 |
iota_view
要求
W
是
semiregular
因为
view
要求
default_initializable
|
仅要求
W
是
copyable
|
参见
|
(C++11)
|
用起始值的连续增量填充范围
(函数模板) |
|
(C++23)
|
用起始值的连续增量填充范围
(算法函数对象) |
通过重复生成相同值构成的
view
(类模板) (定制点对象) |
|
将适配序列的每个元素映射到元素位置及其值组成的元组的
view
(类模板) (范围适配器对象) |