operator-(std::reverse_iterator)
template< class Iterator1, class Iterator2 >
typename reverse_iterator<Iterator1>::difference_type
operator-( const reverse_iterator<Iterator1>& lhs,
const reverse_iterator<Iterator2>& rhs );
| (до C++11) | |
template< class Iterator1, class Iterator2 >
auto operator-( const reverse_iterator<Iterator1>& lhs,
const reverse_iterator<Iterator2>& rhs
) -> decltype(rhs.base() - lhs.base());
| (с C++11) (до C++17) | |
template< class Iterator1, class Iterator2 >
constexpr auto operator-( const reverse_iterator<Iterator1>& lhs,
const reverse_iterator<Iterator2>& rhs
) -> decltype(rhs.base() - lhs.base());
| (с C++17) |
Возвращает расстояние между двумя адаптерами итераторов.
Параметры
| lhs, rhs | - | адаптеры итераторов для вычисления разницы |
Возвращаемое значение
rhs.base() - lhs.base()
Пример
#include <iostream>
#include <iterator>
#include <list>
#include <vector>
int main()
{
std::vector vec{0, 1, 2, 3};
std::reverse_iterator<std::vector<int>::iterator>
vec_ri1{std::reverse_iterator{vec.rbegin()}},
vec_ri2{std::reverse_iterator{vec.rend()}};
std::cout << (vec_ri2 - vec_ri1) << ' '; // 4
std::cout << (vec_ri1 - vec_ri2) << '\n'; // -4
std::list lst{5, 6, 7, 8};
std::reverse_iterator<std::list<int>::iterator>
lst_ri1{std::reverse_iterator{lst.rbegin()}},
lst_ri2{std::reverse_iterator{lst.rend()}};
// auto n = (lst_ri1 - lst_ri2); // error: the underlying iterators do not
// model the random access iterators
}Вывод:
4 -4
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение, опубликованное | Корректное поведение |
|---|---|---|---|
| LWG 280 | C++98 | вычитание между std::reverse_iterator с разными базовыми типами итераторов не разрешалось | разрешено |
См. также
| перемещает или уменьшает итератор (публичный член-функция) |
|
| перемещает итератор (функция-шаблон) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/reverse_iterator/operator-