std 迭代器增加,减少 指定偏移量

增加

1: next(_InputIterator __x, typename iterator_traits<_InputIterator>::difference_type __n = 1)
2: advance(_InputIterator& __i, _Distance __n)

减少

prev(_BidirectionalIterator __x, typename iterator_traits<_BidirectionalIterator>::difference_type __n = 1) 

使用案例:

1. next 使用
	list<int>l{1,2,3,4,5,6,7};
    //在3 后面向后插入 3个 10
    l.insert(std::next(l.begin(),3),3,10);
    for(auto n : l)
    {
        cout<<n<<" ";
    }
    cout<<endl;

    //输出:1 2 3 10 10 10 4 5 6 7
2. prev 使用
	list<int>l{1,2,3,4,5,6,7};
    //在5 前面向前插入 3个 10
    l.insert(std::prev(l.end(),3),3,10);
    for(auto n : l)
    {
        cout<<n<<" ";
    }
    cout<<endl;
3. advance 使用
   list<int>l{1,2,3,4,5,6,7};
    //在5 后面插入插入 3个 10
    auto iter = l.begin();
    std::advance(iter,3);
    l.insert(iter,3,10);
    for(auto n : l)
    {
        cout<<n<<" ";
    }
    cout<<endl;

源码: 底层实现都是依赖advance

template<class InputIt>
constexpr // C++17 起
InputIt next(InputIt it,
             typename std::iterator_traits<Input>::difference_type n = 1)
{
    std::advance(it, n);
    return it;
}
template<class BidirIt>
constexpr // C++17 起
BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1)
{
    std::advance(it, -n);
    return it;
}

注意:

next prev所使用的迭代器 是不同的。具体可以看下面的区别:

①Input iterator: 输入迭代器,只读,不写,单遍扫描,只能递增
②Output iterator: 输出迭代器,只写,不读,单遍扫描,只能递增
③Forward iterator: 前向迭代器,可读写,多遍扫描,只能递增
④Bidirectional iterator: 双向迭代器,可读写,多遍扫描,可递增递减
⑤Random Access Iterator: 随机访问迭代器,可读写,多遍扫描,支持全部迭代器运算
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值