zoukankan      html  css  js  c++  java
  • 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 }

    输出结果:

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

     
  • 相关阅读:
    和为S的连续正数序列
    丑数
    整数中1出现的次数(从1到n整数中1出现的次数)
    数据库常见面试题(非DBA方向)
    两个链表的第一个公共结点
    最小的k个数
    常用的排序
    离散数学(第2版)课后习题答案
    Java入门基础正式汇总
    数学物理方程 课后习题答案 清华大学出版社出版 姜玉山、徐延钦、王晓敏、张庆灵、刘超、李明维版 第2章 课后题答案与解析 复习提纲
  • 原文地址:https://www.cnblogs.com/azbane/p/15364614.html
Copyright © 2011-2022 走看看