std::rend, std::crend
Определён в заголовочном файле <array> | ||
|---|---|---|
Определён в заголовочном файле <deque> | ||
Определён в заголовочном файле <flat_map> | (начиная с C++23) | |
Определён в заголовочном файле <flat_set> | (начиная с C++23) | |
Определён в заголовочном файле <forward_list> | ||
Определён в заголовочном файле <hive> | (начиная с C++26) | |
Определён в заголовочном файле <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 rend( C& c ) noexcept(noexcept(c.rend()))
-> decltype(c.rend());
| (1) |
(начиная с C++14) (constexpr начиная с C++17) |
template< class C >
auto rend( const C& c ) noexcept(noexcept(c.rend()))
-> decltype(c.rend());
| (2) |
(начиная с C++14) (constexpr начиная с C++17) |
template< class T, std::size_t N > std::reverse_iterator<T*> rend( T (&array)[N] ) noexcept; | (3) |
(начиная с C++14) (constexpr начиная с C++17) |
template< class T > std::reverse_iterator<const T*> rend( std::initializer_list<T> il ) noexcept; | (4) |
(начиная с C++14) (constexpr начиная с C++17) |
template< class C >
auto crend( const C& c ) noexcept(noexcept(std::rend(c)))
-> decltype(std::rend(c));
| (5) |
(начиная с C++14) (constexpr начиная с C++17) |
Возвращает итератор на обратный конец заданного диапазона.
1,2) Возвращает
c.rend(), который обычно является итератором, указывающим на элемент сразу за обратным концом последовательности, представленной c.
3) Возвращает объект std::reverse_iterator<T*> на обратный конец
array.
4) Возвращает объект std::reverse_iterator<constT*> на обратный конец
il.
5) Возвращает
std::end(c), всегда рассматривая c как const-квалифицированный.Параметры
| c | - | контейнер или представление с функцией-членом rend |
| array | - | массив произвольного типа |
| il | - | std::initializer_list |
Возвращаемое значение
1,2)
c.rend()
3)
std::reverse_iterator<T*>(array)
4)
std::reverse_iterator<const T*>(il.begin())
5)
std::rend(c)
Исключения
1,2) Исключения и условия их возникновения определяются вызываемым
c.rend().
5) Исключения и условия их возникновения определяются вызываемым
std::rend(c).Перегрузки
Для классов и перечислений, которые не предоставляют подходящую функцию-член rend(), но допускают итерацию, можно определить пользовательские перегрузки rend.
| Для настройки поведения std::ranges::rend и | (начиная с C++20) |
Примечания
Перегрузка для std::initializer_list необходима, поскольку у него нет функции-члена rend.
Пример
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
int a[]{4, 6, -3, 9, 10};
std::cout << "C-style array `a` backwards: ";
std::copy(std::rbegin(a), std::rend(a), std::ostream_iterator<int>(std::cout, " "));
auto il = {3, 1, 4};
std::cout << "\nstd::initializer_list `il` backwards: ";
std::copy(std::rbegin(il), std::rend(il), std::ostream_iterator<int>(std::cout, " "));
std::vector<int> v{4, 6, -3, 9, 10};
std::cout << "\nstd::vector `v` backwards: ";
std::copy(std::rbegin(v), std::rend(v), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
Вывод:
C-style array `a` backwards: 10 9 -3 6 4 std::initializer_list `il` backwards: 4 1 3 std::vector `v` backwards: 10 9 -3 6 4
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 3537 | C++14 |
Для std::rend и std::crend не требовалось передавать спецификацию исключений | требуется |
См. также
|
(C++11)(C++14) | возвращает итератор на конец контейнера или массива (шаблон функции) |
|
(C++14) | возвращает обратный итератор на начало контейнера или массива (шаблон функции) |
|
(C++11)(C++14) | возвращает итератор на начало контейнера или массива (шаблон функции) |
|
(C++20) | возвращает обратный итератор на конец диапазона (объект-точка настройки) |
|
(C++20) | возвращает обратный итератор на конец диапазона только для чтения (объект-точка настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/rend