Namespaces
Variants

std::ranges::cend

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

返回一个哨位 用于常量迭代器(自 C++23 起) 指示一个 const 限定(直到 C++23) 范围的结尾。

令 CT 为

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

对 ranges::cend 的调用是表达式等价于 ranges::end(static_cast<CT&&>(t))。

(直到 C++23)

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

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

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

(自 C++23 起)

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

定制点对象

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

示例

#include <algorithm>
#include <cassert>
#include <ranges>
#include <vector>
int main()
{
    std::vector vec{3, 1, 4};
    int arr[]{5, 10, 15};
    assert(std::ranges::find(vec, 5) == std::ranges::cend(vec));
    assert(std::ranges::find(arr, 5) != std::ranges::cend(arr));
}

另见

返回指示范围结尾的哨兵
(定制点对象)
(C++11)(C++14)
返回指向容器或数组末尾的迭代器
(函数模板)