STL 算法 std::advance

std::advance(block_end,block_size);

1. 写说明

2. 写用法

3.写样例

 直接参考 cplusplus官网讲解:http://www.cplusplus.com/reference/iterator/advance/

 我的理解:

std::advance 第一个参数,一个迭代器; 第二个参数,一个整形数值。作用是把一个迭代器移动 n 个位置,数值大于零,则向后移动, 数值小于零,则向前移动。

特别的一点是:如果迭代器是随机访问迭代器,则不论 n 是多少,仅向后或向前移动一个位置。

思考: std::advance (it, 5)  与 it += 5; 效果完全相同,为何需要 std::advance 存在?况且,it += n , 或者 it -= n, 可能会超出范围导致异常, std::advance 同样会超出范围导致异常。

练习代码:

 1 // advance example
 2 #include <iostream>     // std::cout
 3 #include <iterator>     // std::advance
 4 #include <list>         // std::list
 5 #include <array>
 6 #include <algorithm>
 7 
 8 int main () {
 9   std::list<int> mylist;
10   for (int i=0; i<10; i++) mylist.push_back (i*10);
11 
12   std::cout<<"mylist element is:"<<std::endl;
13   std::for_each(mylist.begin(), mylist.end(), [&](int & element){std::cout<<" "<<element;});
14   std::cout<<std::endl;
15 
16   std::list<int>::iterator it = mylist.begin();
17 
18   std::advance (it,5);
19 
20   std::cout << "The sixth element in mylist is: " << *it << '
';
21 
22   std::advance (it, 4);
23   std::cout << "The tenth element in mylist is: " << *it << '
';
24 
25   std::array<int, 10> myarray;
26   std::for_each(std::begin(myarray), std::end(myarray), [&](int & element){
27       element = *it;
28       (it==mylist.begin())?mylist.begin():--it;});
29 
30   std::cout<<"myarray element is:"<<std::endl;
31   std::for_each(myarray.begin(), myarray.end(), [&](int & element){std::cout<<" "<<element;});
32   std::cout<<std::endl;
33 
34   auto iitt = myarray.begin();
35 
36   std::advance (iitt, 5);
37 
38   std::cout << "The sixth element in myarray is: " << *iitt << '
';
39 
40   iitt = myarray.begin();
41 
42   iitt +=5;
43 
44   std::cout << "The sixth element in myarray is: " << *iitt << '
';
45 
46   return 0;
47 }

输出结果:

原创文章, 转载请注明出处!

 
原文地址:https://www.cnblogs.com/azbane/p/15364614.html