程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 簡單的程序诠釋C++ STL算法系列之一:for_each

簡單的程序诠釋C++ STL算法系列之一:for_each

編輯:C++入門知識

   C++STL的非變易算法(Non-mutating algorithms)是一組不破壞操作數據的模板函數,用來對序列數據進行逐個處理、元素查找、子序列搜索、統計和匹配。

     for_each用於逐個遍歷容器元素,它對迭代器區間[first,last)所指的每一個元素,執行由單參數函數對象f所定義的操作。

     原型:

view plain
template<class InputIterator, class Function> 
   Function for_each( 
      InputIterator _First,  
      InputIterator _Last,  
      Function _Func 
      ); 

   說明:
        for_each 算法范圍 [first, last) 中的每個元素調用函數 F,並返回輸入的參數 f。此函數不會修改序列中的任何元素。

    示例代碼:

view plain
/*******************************************************************
 * Copyright (C) Jerry Jiang
 *               
 * File Name   : For_each.cpp
 * Author      : Jerry Jiang
 * Create      : 2011-9-27 19:46:44
 * Mail        : [email protected]
 * Blog        : http://blog.csdn.net/jerryjbiao 
 *               
 * Description : 簡單的程序诠釋C++ STL算法系列之一            
 *       非變易算法 : 逐個遍歷容器元素 for_each
 *               
 ******************************************************************/ 
 
#include <algorithm> 
#include <list> 
#include <iostream> 
 
using namespace std; 
 
//print為仿函數 
struct print{ 
    int count; 
    print(){count = 0;} 
    void operator()(int x) 
    { 
        cout << x << endl; 
        ++count; 
    } 
}; 
 
int main(void) 

    list<int> ilist; 
    //初始化 
    for ( size_t i = 1; i < 10; ++i) 
    { 
        ilist.push_back(i); 
    } 
    //遍歷ilist元素並打印 
    print p = for_each(ilist.begin(), ilist.end(), print()); 
    //打印ilist元素個數 
    cout << p.count << endl; 
 
    return 0; 

示例說明:

    仿函數,又或叫做函數對象,是STL(標准模板庫)六大組件(容器、配置器、迭代器、算法、配接器、仿函數)之一;仿函數雖然小,但卻極大的拓展了算法的功能,幾乎所有的算法都有仿函數版本。例如,查找算法find_if就是對find算法的擴展,標准的查找是兩個元素向等就找到了,但是什麼是相等在不同情況下卻需要不同的定義,如地址相等,地址和郵編都相等,雖然這些相等的定義在變,但算法本身卻不需要改變,這都多虧了仿函數。 仿函數之所以叫做函數對象,是因為仿函數都是定義了()函數運算操作符的類。

作者“Jerry.Jiang的程序人生”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved