std::ranges::views::take_while, std::ranges::take_while_view
| 定义于头文件 <ranges>
|
||
template< ranges::view V, class Pred >
requires ranges::input_range<V> &&
std::is_object_v<Pred> &&
std::indirect_unary_predicate<const Pred, ranges::iterator_t<V>>
class take_while_view
: public ranges::view_interface<take_while_view<V, Pred>>
|
(1) | (C++20 起) |
namespace views {
inline constexpr /*unspecified*/ take_while = /*unspecified*/;
}
|
(2) | (C++20 起) |
| 调用签名 |
||
template< ranges::viewable_range R, class Pred >
requires /* see below */
constexpr ranges::view auto take_while( R&& r, Pred&& pred );
|
(C++20 起) | |
template< class Pred >
constexpr /*range adaptor closure*/ take_while( Pred&& pred );
|
(C++20 起) | |
views::take_while(e, f) 对于任何合适的子表达式 表达式等价 于 take_while_view(e, f)ese 和 fpredtake_while_view 当底层视图 contiguous_range、random_access_range、bidirectional_range、forward_range 和 input_range 概念时,V 分别对这些概念进行建模。
数据成员
| 成员 | 描述 | ||||
V base_ (私有)
|
底层视图 (仅用于阐述的成员对象*) | ||||
pred_ (私有)
|
底层函数对象 (仅用于阐述的成员对象*) |
成员函数
构造一个
take_while_view
(公开成员函数) |
|
|
返回底层(适配后)视图的副本
(公开成员函数) |
|
|
返回存储的谓词的引用
(公开成员函数) |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回表示结束位置的哨兵
(公开成员函数) |
|
继承自 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> 的公开成员函数)
| |
返回派生视图中第 nn 个元素,仅当它满足 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
的元素
(类模板) (范围适配器对象) |