zoukankan      html  css  js  c++  java
  • std::for_each

    本章描述C++泛型算法for_each的设计和使用。


     我们先来看看C++官方网站上对for_each的描述

    http://www.cplusplus.com/reference/algorithm/for_each/

    (注:以下内容是我对C++官方网站上内容的理解,不准确的地方请见谅)

    • for_each的函数声明:
    template <class InputIterator, class Function>
       Function for_each (InputIterator first, InputIterator last, Function fn);
    • for_each的作用:

    对[first, last)范围内的所有元素都执行Function fn的操作。

    • for_each的实现:

    (注:C++98和C++11中关于这个函数的实现方法有些不同,我们现在先只看C++98的实现)

    根据这个函数的实现,不难看出参数和返回值得类型,范围和使用方法,这里不再赘述。

     1 template<class InputIterator, class Function>
     2 Function for_each(InputIterator first, InputIterator last, Function fn)
     3 {
     4   while (first!=last)
     5   {
     6     fn (*first);
     7     ++first;
     8   }
     9   return fn;      // or, since C++11: return move(fn);
    10 }

    理论上的东西基本就这些,以下是我写的一个简单的例子

     1 #include <algorithm>
     2 
     3 #include <iostream>
     4 #include <vector>
     5 #include <string>
     6 
     7 using std::vector;
     8 using std::string;
     9 using std::cout;
    10 using std::endl;
    11 
    12 template<class InputIter, class Func>
    13 Func LTM_for_each(InputIter first, InputIter last, Func func)
    14 {
    15     while (first != last)
    16     {
    17         func(*first);
    18         ++first;
    19     }
    20     return func;
    21 }
    22 
    23 void helperFunction(string& str) // 注:如果你想用这个函数修改[first,last)中的值,那参数一定要用引用(涉及到传参方式,这里就不说了)。
    24 {
    25     str += ".cpp";
    26 }
    27 
    28 void print(vector<string> vec)
    29 {
    30     vector<string>::iterator iter;
    31     for (iter = vec.begin(); iter != vec.end(); iter++)
    32     {
    33         cout << *iter << endl;
    34     }
    35     cout << endl;
    36 }
    37 
    38 int main(void)
    39 {
    40     string vecVal[] = {"a", "b", "c", "d"};
    41     vector<string> vec(vecVal, vecVal+4);
    42     print(vec);
    43 
    44     for_each(vec.begin(), vec.end(), helperFunction);
    45     // LTM_for_each(vec.begin(), vec.end(), helperFunction);
    46     print(vec);
    47 
    48     return 0;
    49 }
  • 相关阅读:
    oracle各个版本的exp/imp兼容性
    AJAX开发 下载和安装ATF的步骤
    页面省略显示——web
    Oracle数据库中分区表的操作方法
    Hashtable的使用(2)
    RMAN之实战RMAN备份
    oracle_索引使用简介
    oracle中rollback的使用方法
    Hashtable的使用
    startup 出现的监听错误或者未初始化服务句柄【数据库归档问题】
  • 原文地址:https://www.cnblogs.com/chinshing/p/3969298.html
Copyright © 2011-2022 走看看