如何使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#還真的做不到呢!!
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#還真的做不到呢!!
相关文章推荐
- (原創) 如何正確的使用迴圈(使用for_each)? (C/C++) (STL) (template)
- (原創) 如何使用for_each() algorithm? (C/C++) (STL)
- 如何正確的使用迴圈(使用for_each)? (C/C++) (STL) (template)
- (原創) 如何使用for_each() algorithm? (C/C++) (STL)
- (原創) 如何使for_each()傳回值? (C/C++) (STL)
- 【C++ STL应用与实现】26: 如何使用std::for_each以及基于范围的for循环 (since C++11)
- STL-fill()填充算法以及for_each()算法
- [原创]如何改善Managed Code的Performance和Scalability系列之一:由for V.S. for each想到的
- 如何正確的使用迴圈(使用for_each)
- STL--for_each()
- 【C++ STL学习之六】STL算法之for_each
- STL算法 ------- transform() 与 for_each()比较
- STL fill()填充算法以及for_each()算法 取容器中的最大最小值min_element,max_element
- 【STL】for_each示例
- stl算法中for_each的调用函数要注意的问题:
- stl的for_each简单demo
- STL学习之十四:常用算法 for_each 和 transform以及adjacent_find的示例代码
- for_each如何调用全局的和类的成员函数举例
- STL - for_each 简单应用
- STL算法之for_each