在这个答案中,我们可以看到我们可以创建自己的views. 我试过了:
template <typename Range>
struct squared_view : std::ranges::view_interface<squared_view<Range>> {
struct iterator;
constexpr squared_view() = default;
constexpr squared_view(Range t): t(t) { }
auto begin() const { return iterator(std::ranges::begin(t)); }
auto end() const { return iterator(std::ranges::end(t)); }
Range t;
};
template <typename Range>
struct squared_view<Range>::iterator {
using value_type = typename std::ranges::iterator_t<Range>::value_type;
constexpr iterator() = default;
constexpr iterator(std::ranges::iterator_t<Range> it): it_{it} { }
iterator& operator++() {
++it_;
return *this;
}
iterator operator++(int) {
const iterator current{*this};
++it_;
return current; …Run Code Online (Sandbox Code Playgroud)