std::ranges::crbegin
来自cppreference.com
在标头 <ranges> 定义 | ||
在标头 <iterator> 定义 | ||
inlinenamespace/* 未指明 */{ inlineconstexpr/* 未指明 */ crbegin =/* 未指明 */; | (C++20 起) (定制点对象) | |
调用签名 | ||
template<class T > requires /* 见下文 */ | (C++20 起) | |
返回指向被当作逆向序列的 const 限定实参的首元素的迭代器。 | (C++23 前) |
返回指向被当作逆向序列的实参的首元素的常量迭代器。 | (C++23 起) |
令
则对 | (C++23 前) |
若实参为左值,或者 ranges::enable_borrowed_range<std::remove_cv_t<T>> 为 true,则对
所有其他情况下,对 | (C++23 起) |
所有情况下返回类型都实现 std::input_or_output_iterator 和 constant-iterator
(C++23 起)。
定制点对象
名字 ranges::crbegin
代表一个定制点对象,它是某个字面semiregular
类类型的 const 函数对象。 细节参见定制点对象(CustomizationPointObject) 。
[编辑]示例
运行此代码
#include <cassert>#include <iterator>#include <span>#include <vector> int main(){std::vector<int> v{3, 1, 4};auto vi = std::ranges::crbegin(v);assert(*vi ==4);++vi;// OK,迭代器对象可以改动assert(*vi ==1);// *vi = 13; // 错误:底层元素只读 int a[]{-5, 10, 15};auto ai = std::ranges::crbegin(a);assert(*ai ==15); // auto x_x = std::ranges::crbegin(std::vector<int>{6, 6, 6});// 非良构:实参时右值(参见注解 ↑) auto si = std::ranges::crbegin(std::span{a});// OKassert(*si ==15); static_assert ( std::ranges::enable_borrowed_range<std::remove_cv_t<decltype(std::span{a})>>);}
[编辑]参阅
(C++20) | 返回指向范围的逆向迭代器 (定制点对象) |
(C++14) | 返回指向一个容器或数组的逆向迭代器 (函数模板) |