std::ranges::views:: counted
|
定义于头文件
<ranges>
|
||
|
inline
constexpr
/*unspecified*/
counted
=
/*unspecified*/
;
|
(C++20 起) | |
|
调用签名
|
||
|
template
<
class
Iterator,
class
DifferenceType
>
requires
/* 见下文 */
|
(C++20 起) | |
一个计数视图呈现了某个迭代器
i
和非负整数
n
所定义的
计数范围
[
i
,
n
)
中元素的
view
。
一个计数范围
[
i
,
n
)
是指从
i
指向的元素开始,连续
n
个元素的序列,包含起始元素但不包含对
i
进行
++
i
操作
n
次后(如果存在)所指向的元素。
如果
n
==
0
,计数范围有效且为空。否则,仅当
n
为正数、
i
可解引用且
[
++
i
,
--
n
)
构成有效计数范围时,当前计数范围才有效。
形式上,若
it
和
count
为表达式,
T
为
std::
decay_t
<
decltype
(
(
it
)
)
>
,且
D
为
std::
iter_difference_t
<
T
>
,则
-
若
T满足input_or_output_iterator且 decltype ( ( count ) ) 满足 std:: convertible_to < D > :-
若
T满足contiguous_iterator,则 views:: counted ( it, count ) 与 std:: span ( std:: to_address ( it ) , static_cast < std:: size_t > ( static_cast < D > ( count ) ) ) 表达式等价, -
否则,若
T满足random_access_iterator,则 views:: counted ( it, count ) 与 ranges:: subrange ( it, it + static_cast < D > ( count ) ) 表达式等价, - 否则, views:: counted ( it, count ) 与 ranges:: subrange ( std:: counted_iterator ( it, count ) , std:: default_sentinel ) 表达式等价。
-
若
- 否则, views:: counted ( it, count ) 非良构。
目录 |
定制点对象
名称
views::counted
表示一个
定制点对象
,这是一个字面量
semiregular
类类型的常量
函数对象
。详细信息请参阅
定制点对象
。
注释
views::counted
不会检查范围是否足够长以提供全部
count
个元素:若需进行此项检查,请使用
views::
take
。
示例
#include <iostream> #include <ranges> int main() { const int a[]{1, 2, 3, 4, 5, 6, 7}; for (int i : std::views::counted(a, 3)) std::cout << i << ' '; std::cout << '\n'; const auto il = {1, 2, 3, 4, 5}; for (int i : std::views::counted(il.begin() + 1, 3)) std::cout << i << ' '; std::cout << '\n'; }
输出:
1 2 3 2 3 4
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| DR | 适用范围 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| P2393R1 | C++20 | 从整数类类型到 std:: size_t 的隐式转换可能无效 | 改为显式转换 |
参见
|
(C++20)
|
由另一个
view
的前N个元素组成的
view
(类模板) (范围适配器对象) |
|
(C++20)
|
将迭代器-哨位对组合成一个
view
(类模板) |
|
(C++20)
|
跟踪到范围末尾距离的迭代器适配器
(类模板) |
|
(C++20)
(C++20)
|
返回满足特定条件的元素数量
(算法函数对象) |