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 }

    输出结果:

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

     
  • 相关阅读:
    【Android Developers Training】 62. 搭建一个OpenGL ES环境
    【Android Developers Training】 61. 序言:使用OpenGL ES显示图像
    CentOS上安装mongodb
    Ubuntu 10.04上安装MongoDB
    linux awk 内置函数详细介绍(实例)
    无法import的原因(ImportError: No module named *****)
    C语言中volatile关键字的作用[转]
    数据对齐 posix_memalign 函数详解
    android ndk中使用gprof
    宽字符与窄字符
  • 原文地址:https://www.cnblogs.com/azbane/p/15364614.html
Copyright © 2011-2022 走看看