如果可以接受,先将容器反转std::reverse
否则的话可以用c++ 20 ranges
没有c++20 可以hack一个reverse adapter
#include <iostream>
#include <ranges>
#include <vector>
template <typename T>
struct reversion_adapter { T& iterable; };
template <typename T>
auto begin (reversion_adapter<T> w) { return std::rbegin(w.iterable); }
template <typename T>
auto end (reversion_adapter<T> w) { return std::rend(w.iterable); }
template <typename T>
reversion_adapter<T> reverse (T&& iterable) { return { std::forward<T>(iterable) }; }
int main() {
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// c++20
for (const auto &e : std::views::reverse(v)) std::cout << e << " ";
std::cout<<std::endl;
for (const auto &e : std::ranges::reverse_view(v)) std::cout << e << " ";
std::cout<<std::endl;
for (const auto &e : std::ranges::views::reverse(v)) std::cout << e << " ";
std::cout<<std::endl;
// pre-c++20
for (auto&& el: reverse(v)) std::cout << el << ' ';
std::cout<<std::endl;
return 0;
}
【 在 aYong77 的大作中提到: 】
: 谢谢各位。
: 话说 for range,这个怎么倒序 遍历呀。
: 百度没有结果。
--
FROM 45.77.25.*