標題頁 / 算法 / 迭代算法 / fold

fold

摘要

template<
typename Sequence
, typename State
, typename ForwardOp
>
struct fold { typedef unspecified type;
};

描述

持續調用二元 ForwardOp,以上一次調用 ForwardOp 所得結果(第一次調用時使用 State)和區間 [begin<Sequence>::type, end<Sequence>::type) 的每個元素為參數,返回最終的結果。

頭文件

#include <boost/mpl/fold.hpp>

參數

參數 要求 描述
Sequence 前向序列 迭代的序列
State 任意類型 用於第一次 ForwardOp 的初始狀態
ForwardOp 二元 Lambda 表達式 在前向遍歷中被執行的操作

表達式語義

對於任意 前向序列 s, 二元 Lambda 表達式 op, 和任意類型 state:

typedef fold<s,state,op>::type t; 
返回類型: 一個類型
語義:

等價於

typedef iter_fold< s,state,apply<op,_1,deref<_2> > >::type t; 

Complexity

線性。剛好 size<s>::value 次對 op 的調用。

例子

typedef vector<long,float,short,double,float,long,long double> types;
typedef fold<
types
, int_<0>
, if_< is_float<_2>,next<_1>,_1 >
>::type number_of_floats;

BOOST_MPL_ASSERT_RELATION( number_of_floats::value, ==, 4 );

參見

算法, accumulate, reverse_fold, iter_fold, reverse_iter_fold, copy, copy_if