STL 算法 std::advance

std::advance(block_end,block_size);

1. 写说明

2. 写用法

3.写样例

 

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

STL 算法 std::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 << 'n';
21 
22   std::advance (it, 4);
23   std::cout << "The tenth element in mylist is: " << *it << 'n';
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 << 'n';
39 
40   iitt = myarray.begin();
41 
42   iitt +=5;
43 
44   std::cout << "The sixth element in myarray is: " << *iitt << 'n';
45 
46   return 0;
47 }

 

输出结果:

STL 算法 std::advance

 

 

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

 

原文链接: https://www.cnblogs.com/azbane/p/15364614.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    STL 算法 std::advance

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/398288

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月12日 上午9:36
下一篇 2023年4月12日 上午9:36

相关推荐