Namespaces
Variants

std::ranges::crend

来自 zh.cppreference.net
 
 
范围库
范围适配器
 
定义于头文件 <ranges>
定义于头文件 <iterator>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */ crend = /* unspecified */;
}
(自C++20起)
(定制点对象)
调用签名
template< class T >
    requires /* see below */
constexpr /* see below */ auto crend( T&& t );
(自C++20起)

返回一个哨位用于常量迭代器(自C++23起)指示一个被当作反转序列处理的const限定(至C++23)范围的结尾。

令 CT 为

  • const std::remove_reference_t<T>& 若参数是左值 (即 T 是左值引用类型),
  • const T 否则。

调用 ranges::crend 是 表达式等价于 ranges::rend(static_cast<CT&&>(t))。

(至C++23)

如果参数是左值或 ranges::enable_borrowed_range<std::remove_cv_t<T>> 是 true,则调用 ranges::crend 是 表达式等价于:

  • std::const_sentinel<decltype(U)>(U) 对于某个表达式 U 等价于 ranges::rend(possibly-const-range(t))。

在所有其他情况下,调用 ranges::crend 是非良构的,当该调用出现在模板实例化的立即上下文中时,可能导致 替换失败。

(自C++23起)

如果对于表达式 ranges::crend(e),e 是有效的,其中 decltype((e)) 是 T,则 CT 满足 std::ranges::range,并且(至C++23) std::sentinel_for<S, I> 在所有情况下都是 true,其中 S 是 decltype(ranges::crend(e)),且 I 是 decltype(ranges::crbegin(e))。 此外,S 满足 constant-iterator 如果它满足 input_iterator。(自C++23起)

定制点对象

名称 ranges::crend 表示一个 定制点对象 ,它是一个常量 函数对象 ,具有 字面量 的 semiregular 类类型。详情请参阅 定制点对象 。

示例

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    int a[]{4, 6, -3, 9, 10};
    std::cout << "Array backwards: ";
    namespace ranges = std::ranges;
    ranges::copy(ranges::rbegin(a), ranges::rend(a),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    std::cout << "Vector backwards: ";
    std::vector v{4, 6, -3, 9, 10};
    ranges::copy(ranges::rbegin(v), ranges::rend(v),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

输出:

Array backwards: 10 9 -3 6 4
Vector backwards: 10 9 -3 6 4

参见

返回指向范围的反向末端迭代器
(定制点对象)
(C++14)
返回容器或数组的反向末端迭代器
(函数模板)