.. Algorithms/Iteration Algorithms//reverse_iter_fold reverse_iter_fold ================= Synopsis -------- .. parsed-literal:: template< typename Sequence , typename State , typename BackwardOp , typename ForwardOp = _1 > struct reverse_iter_fold { typedef |unspecified| type; }; Description ----------- Returns the result of the successive application of binary ``BackwardOp`` to the result of the previous ``BackwardOp`` invocation (``State`` if it's the first call) and each iterator in the range [``begin::type``, ``end::type``) in reverse order. If ``ForwardOp`` is provided, then it's applied on forward traversal to form the result which is passed to the first ``BackwardOp`` call. Header ------ .. parsed-literal:: #include Parameters ---------- +---------------+-------------------------------+-----------------------------------------------+ | Parameter | Requirement | Description | +===============+===============================+===============================================+ | ``Sequence`` | |Forward Sequence| | A sequence to iterate. | +---------------+-------------------------------+-----------------------------------------------+ | ``State`` | Any type | The initial state for the first ``BackwardOp``| | | | / ``ForwardOp`` application. | +---------------+-------------------------------+-----------------------------------------------+ | ``BackwardOp``| Binary |Lambda Expression| | The operation to be executed on backward | | | | traversal. | +---------------+-------------------------------+-----------------------------------------------+ | ``ForwardOp`` | Binary |Lambda Expression| | The operation to be executed on forward | | | | traversal. | +---------------+-------------------------------+-----------------------------------------------+ Expression semantics -------------------- For any |Forward Sequence| ``s``, binary |Lambda Expression| ``backward_op`` and ``forward_op``, and arbitrary type ``state``: .. parsed-literal:: typedef reverse_iter_fold< s,state,backward_op >::type t; :Return type: A type. :Semantics: Equivalent to .. parsed-literal:: typedef begin::type i\ :sub:`1`; typedef next::type i\ :sub:`2`; |...| typedef next::type last; typedef apply::type state\ :sub:`n`; typedef apply::type state\ :sub:`n-1`; |...| typedef apply::type state\ :sub:`1`; typedef state\ :sub:`1` t; where ``n == size::value`` and ``last`` is identical to ``end::type``; equivalent to ``typedef state t;`` if ``empty::value == true``. .. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. parsed-literal:: typedef reverse_iter_fold< s,state,backward_op,forward_op >::type t; :Return type: A type. :Semantics: Equivalent to .. parsed-literal:: typedef reverse_iter_fold< Sequence , iter_fold::type , backward_op >::type t; Complexity ---------- Linear. Exactly ``size::value`` applications of ``backward_op`` and ``forward_op``. Example ------- Build a list of iterators to the negative elements in a sequence. .. parsed-literal:: typedef vector_c numbers; typedef list_c negatives; typedef reverse_iter_fold< numbers , list<> , if_< less< deref<_2>,int_<0> >, push_front<_1,_2>, _1 > >::type iters; BOOST_MPL_ASSERT(( equal< negatives , transform_view< iters,deref<_1> > > )); See also -------- |Algorithms|, |iter_fold|, |reverse_fold|, |fold|