• 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 }

    输出结果:

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

     
  • 相关阅读:
    NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(3)
    zend studio快捷键
    Guid的生成和数据修整(去除空格和小写字符)
    工作中常用Windows快捷键整理(1)-快速关闭网页
    PHP学习笔记(3)-Zend Studio安装和汉化
    PHP学习笔记(2)
    PHP学习笔记(1)
    判断本机ip是电信还是网通
    作业 4/1
    logging 模块
  • 原文地址:https://www.cnblogs.com/azbane/p/15364614.html
Copyright © 2020-2023  润新知