operator- (std::reverse_iterator)
| Iterator concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator primitives | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Algorithm concepts and utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Indirect callable concepts | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Common algorithm requirements | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Utilities | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Iterator adaptors | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Non-member functions | ||||
| 
                
                 
                  
                   operator-
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++20)
                  
                 
                
                | ||||
| 
                
                 
                  
                   (C++14)
                  
                 
                
                | 
| 
           定义于头文件
            
            
             <iterator>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            Iter1,
            
             class
            
            Iter2
            
             >
            
             
             
              typename
             
             reverse_iterator
             
              <
             
             Iter
             
              >
             
             
              ::
             
             
              difference_type
             
              | (C++11 前) | |
| 
           
            
             template
            
            
             <
            
            
             class
            
            Iter1,
            
             class
            
            Iter2
            
             >
            
             
             
              auto
             
             operator
             
              -
             
             
              (
             
             
              const
             
             reverse_iterator
             
              <
             
             Iter1
             
              >
             
             
              &
             
             lhs,
              | (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
         (公开成员函数) | |
| 前进迭代器 (函数模板) |