- ranges[meta header]
- std::ranges[meta namespace]
- class template[meta id-type]
- cpp20[meta cpp]
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)
}
}
- view[link view.md]
- input_range[link input_range.md]
- is_object_v[link /reference/type_traits/is_object.md]
- indirect_unary_predicate[link /reference/iterator/indirect_unary_predicate.md]
- iterator_t[link iterator_t.md]
- view_interface[link view_interface.md]
- (1): 元のRangeの先頭から指定した条件を連続して満たす範囲を取り出す
view
- (2):
take_while_view
を生成する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;
}
}
- views::take_while[color ff0000]
- views::iota[link iota_view.md]
1234
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ?
- Visual C++: 2019 Update 10 [mark verified]
- N4861 24 Ranges library
- C++20 ranges
- P2367R0 Remove misuses of list-initialization from Clause 24 (本提案文書はC++20に遡って適用されている)