constexpr iterator& operator--() requires bidirectional_range<V>; // (1)
constexpr iterator operator--(int) requires bidirectional_range<V>; // (2)
概要
イテレータを1つ後方に進める。
効果
(1)は、
do
--current_;
while (!invoke(*parent_->pred_, *current_));
return *this;
と等しい。
(2)は、
auto tmp = *this;
--*this;
return tmp;
と等しい。
例
#include <ranges>
#include <vector>
#include <iostream>
int main() {
using std::ranges::filter_view;
using std::ranges::iterator_t;
std::vector<int> vec = {0, 1, 2, 3, 4, 5};
filter_view fv{vec, [](int x){ return x % 2 == 0; }};
iterator_t<decltype(fv)> i(fv, vec.begin());
std::advance(i, 2);
std::cout << *i << '\n';
i--;
std::cout << *i << '\n';
i--;
std::cout << *i << '\n';
}
出力
4
2
0
バージョン
言語
- C++20
処理系
- Clang: 13.0.0 ✅
- GCC: 10.1.0 ✅
- ICC: ?
- Visual C++: 2019 Update 10 ✅