advance()的简单解释及用法
advance()的函数原型
template< class InputIt, class Distance >void advance( InputIt& it, Distance n );
template< class InputIt, class Distance >constexpr void advance( InputIt& it, Distance n );
advance()的含义:
表示将输入迭代器it移动n个单位的步长,其中n可为正数与负数。注意:这里的输入迭代器为双向迭代器,即迭代器即可右移,也可左移。
若移动n个单位的步长后,超出迭代器范围[begin,end)
,则此行为未定义。
advance()函数返回值:
函数返回值为void,也就是将传入的迭代器用引用的方式移动n个单位了。
测试代码:
vector<int> vc{ 1,2,3,4,5,6,7 };
vector<int>::iterator beg = vc.begin();
cout << "beg指向的元素值为:" << *beg << endl;//1
advance(beg, 2);
cout << "将beg右移两个单位后指向的元素值为:" << *beg << endl;//3
advance(beg, -1);
cout << "将beg左移一个单位后指向的元素值为:" << *beg << endl;//2
测试结果:
beg指向的元素值为:1
将beg右移两个单位后指向的元素值为:3
将beg左移一个单位后指向的元素值为:2
next()的简单解释及用法
next()的函数原型:
template< class ForwardIt >ForwardIt next(
ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1 );
template< class InputIt >constexpr InputIt next(
InputIt it,
typename std::iterator_traits<InputIt>::difference_type n = 1 );
next()的函数实现:
template<class ForwardIt>
ForwardIt next(ForwardIt it,
typename std::iterator_traits<ForwardIt>::difference_type n = 1)
{
std::advance(it, n);
return it;
}
next()的含义:
表示迭代器右移n个单位的步长,即迭代器+n。
若移动n个单位的步长后,超出迭代器范围[begin,end)
,则此行为未定义。
next()函数返回值:
函数的返回值为一个迭代器,也就是传入迭代器右移n个单位后,返回这个移动后的新迭代器。
测试代码:
vector<int> vc{ 1,2,3,4,5,6,7 };
vector<int>::iterator beg = vc.begin();
for (int i = 0; i < vc.size(); ++i)
{
auto it = next(beg, i);
cout << "beg右移" << i << "个单位后的元素值为:" << *it << endl;
}
测试结果如下:
beg右移0个单位后的元素值为:1
beg右移1个单位后的元素值为:2
beg右移2个单位后的元素值为:3
beg右移3个单位后的元素值为:4
beg右移4个单位后的元素值为:5
beg右移5个单位后的元素值为:6
beg右移6个单位后的元素值为:7
prev()的简单解释及用法
prev()的函数原型:
template< class BidirIt >BidirIt prev(
BidirIt it,
typename std::iterator_traits<BidirIt>::difference_type n = 1 );
template< class BidirIt >constexpr BidirIt prev(
BidirIt it,
typename std::iterator_traits<BidirIt>::difference_type n = 1 );
prev()的函数实现:
template<class BidirIt>
BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1)
{
std::advance(it, -n);
return it;
}
prev()的含义:
表示迭代器左移n个单位,即迭代器-n。
若移动n个单位的步长后,超出迭代器范围[begin,end)
,则此行为未定义。
prev()函数返回值:
函数的返回值为一个迭代器,也就是传入迭代器左移n个单位后,返回这个移动后的新迭代器。
测试代码:
vector<int> vc{ 1,2,3,4,5,6,7 };
vector<int>::iterator end = vc.end();
for (int i = 1; i <= vc.size(); ++i)
{
auto it = prev(end, i);
cout << "end左移" << i << "个单位后的元素值为:" << *it << endl;
}
测试结果:
end左移1个单位后的元素值为:7
end左移2个单位后的元素值为:6
end左移3个单位后的元素值为:5
end左移4个单位后的元素值为:4
end左移5个单位后的元素值为:3
end左移6个单位后的元素值为:2
end左移7个单位后的元素值为:1