Namespaces
Variants

std::rbegin,std::crbegin

来自 zh.cppreference.net
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
通用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
定义于头文件 <array>
定义于头文件 <deque>
定义于头文件 <flat_map>
 (C++23 起)
定义于头文件 <flat_set>
 (C++23 起)
定义于头文件 <forward_list>
定义于头文件 <inplace_vector>
 (C++26 起)
定义于头文件 <iterator>
定义于头文件 <list>
定义于头文件 <map>
定义于头文件 <optional>
 (C++26 起)
定义于头文件 <regex>
定义于头文件 <set>
定义于头文件 <span>
 (C++20 起)
定义于头文件 <stacktrace>
 (C++23 起)
定义于头文件 <string>
定义于头文件 <string_view>
 (C++17 起)
定义于头文件 <unordered_map>
定义于头文件 <unordered_set>
定义于头文件 <valarray>
定义于头文件 <vector>
template< class C >
auto rbegin( C& c ) noexcept(noexcept(c.rbegin()))
    -> decltype(c.rbegin());
(1) (C++14 起)
(C++17 起 constexpr)
template< class C >
auto rbegin( const C& c ) noexcept(noexcept(c.rbegin()))
    -> decltype(c.rbegin());
(2) (C++14 起)
(C++17 起 constexpr)
template< class T, std::size_t N >
std::reverse_iterator<T*> rbegin( T (&array)[N] ) noexcept;
(3) (C++14 起)
(C++17 起 constexpr)
template< class T >
std::reverse_iterator<const T*> rbegin( std::initializer_list<T> il ) noexcept;
(4) (C++14 起)
(C++17 起 constexpr)
template< class C >
auto crbegin( const C& c ) noexcept(noexcept(std::rbegin(c)))
    -> decltype(std::rbegin(c));
(5) (C++14 起)
(C++17 起 constexpr)

返回指向给定范围的反向起始的迭代器。

1,2) 返回 c.rbegin(),通常是 c 所表示序列的反向起始的迭代器。
1) 如果 C 是标准容器(Container),则返回 C::reverse_iterator 对象。
2) 如果 C 是标准容器(Container),则返回 C::const_reverse_iterator 对象。
3) 返回指向 std::reverse_iterator<T*> 的反向起始的 array 对象。
4) 返回指向 std::reverse_iterator<const T*> 的反向起始的 il 对象。
5) 返回 std::rbegin(c),其中 c 始终被视为 const 限定。
如果 C 是标准容器(Container),则返回 C::const_reverse_iterator 对象。

参数

c - 具有 rbegin 成员函数的容器或视图
array - 任意类型的数组
il - 一个 std:: initializer_list

返回值

1,2) c. rbegin ( )
3) std:: reverse_iterator < T * > ( array + N )
4) std:: reverse_iterator < const T * > ( il. end ( ) )
5) c. rbegin ( )

异常

可能抛出实现定义的异常。

重载

可以为那些不提供合适的 rbegin() 成员函数但仍可迭代的类和枚举提供自定义的 rbegin 重载版本。

通过 实参依赖查找 找到的 rbegin 重载可用于自定义 std :: ranges:: rbegin 和 std::ranges::crbegin 的行为。

(C++20 起)

注释

针对 std::initializer_list 的重载是必需的,因为它没有成员函数 rbegin 。

示例

#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    std::vector<int> v = {3, 1, 4};
    auto vi = std::rbegin(v); // “vi”的类型是 std::vector<int>::reverse_iterator
    std::cout << "*vi = " << *vi << '\n';
    *std::rbegin(v) = 42; // 正确:赋值后 v[2] == 42
//  *std::crbegin(v) = 13; // 错误:该位置为只读
    int a[] = {-5, 10, 15};
    auto ai = std::rbegin(a); // “ai”的类型是 std::reverse_iterator<int*>
    std::cout << "*ai = " << *ai << '\n';
    auto il = {3, 1, 4};
    // 下方“it”的类型是 std::reverse_iterator<int const*>:
    for (auto it = std::rbegin(il); it != std::rend(il); ++it)
        std::cout << *it << ' ';
    std::cout << '\n';
}

输出:

*vi = 4
*ai = 15
4 1 3

缺陷报告

以下行为变更缺陷报告已追溯性地应用于先前发布的 C++ 标准。

DR 应用于 发布时的行为 正确行为
LWG 3537 C++14 std::rbegin 和 std::crbegin 未要求传播异常规范 要求

参见

(C++11) (C++14)
返回指向容器或数组起始位置的迭代器
(函数模板)
(C++11) (C++14)
返回指向容器或数组末尾位置的迭代器
(函数模板)
(C++14)
返回容器或数组的逆向末尾迭代器
(函数模板)
返回指向范围的逆向迭代器
(定制点对象)
返回指向只读范围的逆向迭代器
(定制点对象)