c++ 迭代器

iterator catagoly

迭代器种类

  1. input 向后读
  2. output 向后写
  3. forward 向后读写
  4. bidrectional 先后读写
  5. random 随机读写
advance 与 next

除了random 种类的迭代器,其他的都无法随机访问,但是STL算法为我们提供了随机访问的机会,就是通过advance 和 next函数。

不同点

1 首先语法不同,advance 没有返回值,next 返回一个目标位置的迭代器。next 有缺省值,advance 没有

template
void advance( InputIt& it, Distance n );

it: Iterator to be advanced
n: Distance to be advanced

// Definition of std::next()
ForwardIterator next (ForwardIterator it,
       typename iterator_traits::difference_type n = 1);

it: Iterator pointing to base position
n: Distance to be advanced from base position.

2 使用上,一个是输入参数,一个输入输出参数。这意味着advance 会修改传入的参数,但是next不会。

// C++ program to demonstrate 
// std::advance vs std::next 
#include <iostream> 
#include <iterator> 
#include <deque> 
#include <algorithm> 
using namespace std; 
int main() 
{ 
    // Declaring first container 
    deque<int> v1 = { 1, 2, 3 }; 
  
    // Declaring second container for 
    // copying values 
    deque<int> v2 = { 4, 5, 6 }; 
  
    deque<int>::iterator ii; 
    ii = v1.begin(); 
    // ii points to 1 in v1 
  
    deque<int>::iterator iii; 
    iii = std::next(ii, 2); 
    // ii not modified 
  
    // For std::advance 
    // std::advance(ii, 2) 
    // ii modified and now points to 3 
  
    // Using copy() 
    std::copy(ii, iii, std::back_inserter(v2)); 
    // v2 now contains 4 5 6 1 2 
  
    // Displaying v1 and v2 
    cout << "v1 = "; 
  
    int i; 
    for (i = 0; i < 3; ++i) { 
        cout << v1[i] << " "; 
    } 
  
    cout << "\nv2 = "; 
    for (i = 0; i < 5; ++i) { 
        cout << v2[i] << " "; 
    } 
  
    return 0; 
} 
Output:

v1 = 1 2 3
v2 = 4 5 6 1 2 

3 最重要的,advance 可以接受任何类型迭代器,而next 只能接收 forward 之后种类的迭代器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值