您的位置:首页 > 编程语言 > C语言/C++

如何使for_each()傳回值? (C/C++) (STL)

2010-10-26 20:11 459 查看
Abstract
for_each()是STL中少數可以回傳值的algorithm,此範例在展示for_each()此特殊功能與function object可以留住state的特性。

Introduction
function object與global function的差別除了function object可以傳入參數外,還可以不使用static就可以留住state。

一個簡單的需求,想要每印n個數字就換行,並且統計出所有iterator的和,所以function object必須能留住state才知道目前印了幾個數字,且統計sum為多少。

Sample Code


1
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
sum is 190

17行

private:
int _n;
int _cnt;
int _sum;

_n為設定幾個字跳行
_cnt統計目前已經印了幾個字
_sum統計目前加總結果

29行

if (_cnt % _n)
cout << elem << " ";
else
cout << elem << endl;

若每印n個字,就加印換行

35行

int sum = for_each(ivec.begin(), ivec.end(), printElem(5));

這樣for_each()就能風風光光的每n個字就換行,還可以順便加總結果。

Conclusion
STL真的很神奇,以上的程式想一行一行翻成C#還真的做不到呢!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: