operator-(std::reverse_iterator)
Определён в заголовочном файле <iterator> | ||
|---|---|---|
template< class Iter1, class Iter2 >
typename reverse_iterator<Iter>::difference_type
operator-( const reverse_iterator<Iter1>& lhs,
const reverse_iterator<Iter2>& rhs );
| (до C++11) | |
template< class Iter1, class Iter2 >
auto operator-( const reverse_iterator<Iter1>& lhs,
const reverse_iterator<Iter2>& rhs )
-> decltype(rhs.base() - lhs.base());
|
(начиная с C++11) (constexpr начиная с C++17) |
Возвращает расстояние между двумя адаптерами итераторов.
Параметры
| lhs, rhs | - | адаптеры итераторов, для которых вычисляется разность |
Возвращаемое значение
rhs.base() - lhs.base()
Примечания
operator- возвращает rhs.base() - lhs.base(), а не lhs.base() - rhs.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 random access iterator
}
Вывод:
4 -4
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроспективно к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 280 | C++98 | вычитание итераторов разных типов не допускалось | допускается |
См. также
увеличивает или уменьшает reverse_iterator (открытая функция-член) |
|
| увеличивает итератор (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/reverse_iterator/operator-