- ranges[meta header]
- std::ranges[meta namespace]
- reverse_view[meta class]
- function[meta id-type]
- cpp20[meta cpp]
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- reverse_iterator[link /reference/iterator/reverse_iterator.md]
先頭を指すイテレータを取得する。
- (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
}- begin[color ff0000]
5
4
5
- C++20
- Clang: 13.0.0 [mark verified]
- GCC: 10.1.0 [mark verified]
- ICC: ?
- Visual C++: 2019 Update 10 [mark verified]