constexpr iterator begin(); // (1) C++20
constexpr iterator<false> begin(); // (1) C++26
constexpr iterator<true> begin() const
requires (input_range<const V> && !forward_range<const V> &&
indirect_unary_predicate<const Pred, iterator_t<const V>>); // (2) C++26
概要
viewの先頭要素を指すイテレータを取得する。
- (1) : 非
const版 - (2) :
const版。元のRangeがinput_rangeであり、かつforward_rangeではない場合に限り提供される
事前条件
pred_.has_value()がtrueであること。
戻り値
{*this, ranges::find_if(base_, ref(*pred_))}
備考
- (1) :
rangeのモデルとなるためにはこの関数が償却定数時間で実行できなければならないため、値はキャッシュされる - (2) : この関数は値をキャッシュしない
例
#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::ranges::filter_view fv{vec, [](int i) { return i % 2 == 0; }};
auto it = fv.begin();
std::cout << *it << '\n';
}
出力
2
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅
参照
- N4861 24.7.4 Filter view
- N4950 26.7.8 Filter view
- P3725R3 Filter View Extensions for Safer Use
- C++26で、(2)の
const版オーバーロードを追加 (入力Rangeの場合のconstイテレーションをサポート)
- C++26で、(2)の