std::ranges::crbegin
Определён в заголовочном файле <ranges> | ||
|---|---|---|
Определён в заголовочном файле <iterator> | ||
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ crbegin = /* unspecified */;
}
| (начиная с C++20) (объект-точка настройки) | |
| Сигнатура вызова | ||
template< class T >
requires /* see below */
constexpr /* see below */ auto crbegin( T&& t );
| (начиная с C++20) |
| Возвращает итератор на первый элемент аргумента с квалификатором const, который рассматривается как последовательность в обратном порядке. | (до C++23) |
| Возвращает константный итератор на первый элемент аргумента, который рассматривается как последовательность в обратном порядке. | (начиная с C++23) |
| Пусть
Вызов | (до C++23) |
| Если аргумент является lvalue или
Во всех остальных случаях вызов | (начиная с C++23) |
Во всех случаях возвращаемый тип моделирует std::input_or_output_iterator и constant-iterator(начиная с C++23).
Объекты-точки настройки
Имя ranges::crbegin обозначает объект-точку настройки, который является константным функциональным объектом типа класса — литерального semiregular. Подробности см. в разделе Объект-точка настройки.
Пример
#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, iterator object is mutable
assert(*vi == 1);
// *vi = 13; // Error: underlying element is read-only
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});
// ill-formed: the argument is an rvalue (see Notes ↑)
auto si = std::ranges::crbegin(std::span{a}); // OK
assert(*si == 15);
static_assert
(
std::ranges::enable_borrowed_range<std::remove_cv_t<decltype(std::span{a})>>
);
}
См. также
|
(C++20) | возвращает обратный итератор для диапазона (объект-точка настройки) |
|
(C++14) | возвращает обратный итератор на начало контейнера или массива (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/crbegin