C++20增加了ranges,对于容器的使用是一次比较大的改进,C++23为ranges增加了反向查找的工具find_last:
#include <algorithm> #include <cassert> #include <forward_list> #include <iomanip> #include <iostream> #include <string_view> #include <print> int main() { namespace ranges = std::ranges; constexpr static auto v = {1, 2, 3, 1, 2, 3, 1, 2}; {//#1 constexpr auto i1 = ranges::find_last(v.begin(), v.end(), 3); constexpr auto i2 = ranges::find_last(v, 3); static_assert(ranges::distance(v.begin(), i1.begin()) == 5); static_assert(ranges::distance(v.begin(), i2.begin()) == 5); std::println("#1 {}", i1); std::println("#1 {}", i2); } {//#2 constexpr auto i1 = ranges::find_las