Namespaces
Variants

operator-(std::reverse_iterator)

来自 zh.cppreference.net
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
通用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(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
(公开成员函数)
前进迭代器
(函数模板)