std::ranges:: views:: take_while, std::ranges:: take_while_view
|
定义于头文件
<ranges>
|
||
|
template
<
ranges::
view
V,
class
Pred
>
requires
ranges::
input_range
<
V
>
&&
|
(1) | (C++20 起) |
|
namespace
views
{
inline
constexpr
/*未指定*/
take_while
=
/*未指定*/
;
|
(2) | (C++20 起) |
|
调用签名
|
||
|
template
<
ranges::
viewable_range
R,
class
Pred
>
requires
/* 见下文 */
|
(C++20 起) | |
|
template
<
class
Pred
>
constexpr /*范围适配器闭包*/ take_while ( Pred && pred ) ; |
(C++20 起) | |
take_while_view
在底层视图
V
满足相应概念时,分别实现
contiguous_range
、
random_access_range
、
bidirectional_range
、
forward_range
和
input_range
概念。
目录 |
数据成员
| 成员 | 描述 |
V
base_
(私有)
|
底层视图
( 仅用于说明的成员对象* ) |
copyable-box
<Pred>
(C++23 前)
movable-box
<Pred>
(C++23 起)
pred_
(私有)
|
底层函数对象
( 仅用于说明的成员对象* ) |
成员函数
构造一个
take_while_view
(公开成员函数) |
|
|
返回底层(适配后)视图的副本
(公开成员函数) |
|
|
返回存储的谓词的引用
(公开成员函数) |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回表示结束位置的哨兵
(公开成员函数) |
|
继承自 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>
的公开成员函数)
|
|
获取派生视图数据的地址,仅当其迭代器类型满足
contiguous_iterator
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图中的首个元素,仅在满足
forward_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
返回派生视图中的第
n
个元素,仅当其满足
random_access_range
时提供
(
std::ranges::view_interface<D>
的公开成员函数)
|
|
推导指引
嵌套类
|
哨兵类型
( 仅用于说明的成员类模板* ) |
注释
对于
forward_iterator
s
,
views
::
take_while
(
v, pred
)
类似于
ranges::
subrange
{
ranges::
begin
(
v
)
,
ranges::
find_if_not
(
v, pred
)
}
,但后者仅在构造期间调用
pred
(而前者在每次有效的
take_while
迭代器与哨位比较时都会调用
pred
)。
示例
#include <iostream> #include <ranges> int main() { for (int year : std::views::iota(2020) | std::views::take_while([](int y){ return y < 2026; })) std::cout << year << ' '; std::cout << '\n'; const char note[]{"Today is yesterday's tomorrow!..."}; auto not_dot = [](char c){ return c != '.'; }; for (char x : std::ranges::take_while_view(note, not_dot)) std::cout << x; std::cout << '\n'; }
输出:
2020 2021 2022 2023 2024 2025 Today is yesterday's tomorrow!
参见
|
(C++20)
|
由另一个
view
的前N个元素组成的
view
(类模板) (范围适配器对象) |
由另一个
view
的元素组成的
view
,跳过初始元素子序列直至首个谓词返回
false
的元素
(类模板) (范围适配器对象) |