namespace std::ranges {
template<view V, class Pred>
requires input_range<V> && is_object_v<Pred> && indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>> { …… }; // (1)
namespace views {
inline constexpr /*unspecified*/ take_while = /*unspecified*/; // (2)
}
}
概要
- (1): 元のRangeの先頭から指定した条件を連続して満たす範囲を取り出す
view
- (2):
take_while_view
を生成するRangeアダプタオブジェクト
Rangeコンセプト
borrowed | sized | output | input | forward | bidirectional | random_access | contiguous | common | viewable | view |
---|---|---|---|---|---|---|---|---|---|---|
(1) | (1) | (1) | (1) | (1) | (1) | ○ | ○ |
- (1):
V
に従う
テンプレートパラメータ制約
view<V>
input_range<V>
is_object_v<Pred>
indirect_unary_predicate<Pred,iterator_t<V>>
効果
- (2): 式
views::take_while(E, F)
の効果はtake_while_view(E, F)
と等しい
メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++20 |
base |
V の参照を取得する |
C++20 |
pred |
述語を取得する | C++20 |
begin |
先頭を指すイテレータを取得する | C++20 |
end |
番兵を取得する | C++20 |
継承しているメンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
empty |
Rangeが空かどうかを判定する | C++20 |
operator bool |
Rangeが空でないかどうかを判定する | C++20 |
data |
Rangeの先頭へのポインタを取得する | C++20 |
front |
先頭要素への参照を取得する | C++20 |
back |
末尾要素への参照を取得する | C++20 |
operator[] |
要素へアクセスする | C++20 |
cbegin |
定数イテレータを取得する | C++23 |
cend |
定数イテレータ(番兵)を取得する | C++23 |
推論補助
名前 | 説明 | 対応バージョン |
---|---|---|
(deduction_guide) |
クラステンプレートの推論補助 | C++20 |
例
#include <ranges>
#include <iostream>
int main() {
using namespace std;
for (int i : views::iota(1) | views::take_while([](int x){ return x < 5; })) {
cout << i;
}
}
出力
1234
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅
参照
- N4861 24 Ranges library
- C++20 ranges
- P2367R0 Remove misuses of list-initialization from Clause 24 (本提案文書はC++20に遡って適用されている)