std::ranges::crend
Определено в заголовке <ranges> |
||
|---|---|---|
Определено в заголовке <iterator> |
||
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ crend = /* unspecified */;
}
|
(с C++20) (объект точки кастомизации) |
|
| Подпись вызова | ||
template< class T >
requires /* see below */
constexpr /* see below */ auto crend( T&& t );
|
(с C++20) |
Возвращает страж для константного итератора(с C++23) указывающий конец константной(до C++23) последовательности, которая обрабатывается как обратная последовательность.
|
Пусть
Вызов |
(до C++23) |
|
Если аргумент является левым значением или
Во всех остальных случаях вызов |
(с C++23) |
Если ranges::crend(e) допустимо для выражения 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 соответствует constant-iterator если оно соответствует input_iterator.(с C++23)
Объекты точки кастомизации
Имя ranges::crend обозначает объект точки кастомизации, который является константным функциональным объектом типа литерала semiregular класса. Для целей пояснения, неквалифицированная по cv версия его типа обозначается как __crend_fn.
Все экземпляры __crend_fn равны. Эффекты вызова разных экземпляров типа __crend_fn с одними и теми же аргументами эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, левым или правым значением, и квалифицировано ли оно как const (однако не требуется, чтобы квалифицированный volatile экземпляр был вызываем). Таким образом, ranges::crend может быть свободно скопирован, и его копии могут использоваться взаимозаменяемо.
Учитывая набор типов Args..., если std::declval<Args>()... удовлетворяют требованиям аргументов для ranges::crend выше, __crend_fn соответствует
-
std::invocable<__crend_fn, Args...>, -
std::invocable<const __crend_fn, Args...>, -
std::invocable<__crend_fn&, Args...>, и -
std::invocable<const __crend_fn&, Args...>.
В противном случае, никакой оператор вызова функции __crend_fn не участвует в разрешении перегрузки.
Пример
#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++20)
|
возвращает обратный итератор конца диапазона (объект точки кастомизации) |
|
(C++14)
|
возвращает обратный итератор конца контейнера или массива (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/crend