constexpr reverse_iterator<iterator_t<V>> begin(); // (1) C++20
constexpr reverse_iterator<iterator_t<V>> begin()
requires common_range<V>; // (2) C++20
constexpr auto begin() const
requires common_range<const V>; // (3) C++20
概要
先頭を指すイテレータを取得する。
効果
- (1) : キャッシュが空の場合、
cache_ = make_reverse_iterator(ranges::next(ranges::begin(base_), ranges::end(base_)))
を実行する。そうでなければreturn *cache_;
- (2) :
return make_reverse_iterator(ranges::end(base_));
- (3) :
return make_reverse_iterator(ranges::end(base_));
備考
- (1)は、
common_range
ではないRangeのために、終端位置をキャッシュして償却定数時間で返す
例
#include <ranges>
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
std::ranges::reverse_view rv(vec);
auto it = rv.begin();
// 逆順に出力
std::cout << *it << std::endl; // 5
++it;
std::cout << *it << std::endl; // 4
// const版
const auto& crv = rv;
auto cit = crv.begin();
std::cout << *cit << std::endl; // 5
}
出力
5
4
5
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅