Namespaces
Variants

operator- (std::reverse_iterator)

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定义于头文件 <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 起)
(C++17 起为 constexpr)

返回两个迭代器适配器之间的距离。

目录

参数

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); // 错误:底层迭代器不
                                  //        满足随机访问迭代器要求
}

输出:

4 -4

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用标准 发布时行为 正确行为
LWG 280 C++98 不允许异构减法运算 允许

参见

递增或递减 reverse_iterator
(公开成员函数)
前进迭代器
(函数模板)