Namespaces
Variants

std::ranges:: crend

From cppreference.net
Ranges library
Range adaptors
定义于头文件 <ranges>
定义于头文件 <iterator>
inline namespace /* 未指定 */ {

inline constexpr /* 未指定 */ crend = /* 未指定 */ ;

}
(C++20 起)
(定制点对象)
调用签名
template < class T >

requires /* 见下文 */

constexpr /* 见下文 */ auto crend ( T && t ) ;
(C++20 起)

返回一个哨兵 用于常量迭代器 (自 C++23 起) ,指示被视作反向序列的 const 限定 (直至 C++23) 范围的末尾。

range-rbegin-rend.svg

CT

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

(C++23 前)

若实参为左值,或 ranges:: enable_borrowed_range < std:: remove_cv_t < T >> true ,则对 ranges::crend 的调用表达式等价于:

其他情况下,调用 ranges::crend 非良构,当调用出现在模板实例化的直接上下文时可能导致 替换失败

(C++23 起)

若表达式 e 满足 ranges :: crend ( 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 满足 input_iterator 概念,则其同时满足 constant-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)
返回容器或数组的反向末端迭代器
(函数模板)