增加
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: 随机访问迭代器,可读写,多遍扫描,支持全部迭代器运算