2002-09-16 19:25:33 +00:00
<!doctype html public "-//ietf//dtd html//en">
2003-03-12 13:29:12 +00:00
< html >< head >< title > boost::mpl::copy_if</ title >
2002-09-16 19:25:33 +00:00
< link rel = "stylesheet" href = "../mpl_wiki.css" >
</ head >< body bgcolor = "white" >
2003-03-12 13:29:12 +00:00
< h1 >< a href = "../Table_of_Contents.html" >< img src = "../mpl_logo.jpg" alt = "[Home]" border = 0 align = "right" ></ a > copy_if</ h1 >< h3 > Synopsis</ h3 >
2002-09-16 19:25:33 +00:00
< p >
< pre >
template<
typename Sequence
, typename State
, typename BinaryOp
, typename Pred
>
struct copy_if
{
typedef < em > unspecified</ em > type;
};
</ pre >
< p >
< h3 > Description</ h3 >
< p >
Returns the result of the successive application of < code > BinaryOp</ code > to the result of the previous < code > BinaryOp</ code > invocation (< code > State</ code > if it's the first call) and every element in the range < code > [begin< Sequence> ::type,end< Sequence> ::type)</ code > that satisfies the predicate < code > Pred</ code > , in the linear order. A typical application for < code > copy_if</ code > is to conditionally copy the content of one sequence into another - see the example below.
< p >
< h3 > Definition</ h3 >
< p >
< pre >
2003-03-12 13:29:12 +00:00
#include "< a href = "../../../../../boost/mpl/copy_if.hpp" > boost/mpl/copy_if.hpp</ a > "
2002-09-16 19:25:33 +00:00
</ pre >
< p >
< h3 > Parameters</ h3 >
< table border = "1" >
< tr >< th > Parameter </ th >< th > Requirement </ th >< th > Description </ th ></ tr >
< tr >< td >< code > Sequence</ code ></ td >< td > A model of < a href = "../Sequence.html" > Sequence</ a ></ td >< td > A sequence to iterate. </ td ></ tr >
< tr >< td >< code > State</ code ></ td >< td > A type</ td >< td > The initial state for the first < code > BinaryOp</ code > application. </ td ></ tr >
< tr >< td >< code > BinaryOp</ code ></ td >< td > A model of [Lambda Function]</ td >< td > The operation to be executed on forward traversal. </ td ></ tr >
< tr >< td >< code > Pred</ code ></ td >< td > An unary Predicate [Lambda Expression]</ td >< td > The copying condition. </ td ></ tr >
</ table >
< p >
< h3 > Expression semantics</ h3 >
< p >
< table border = "1" >
< tr >< th > Expression </ th >< th > Expression type </ th >< th > Precondition </ th >< th > Semantics </ th >< th > Postcondition </ th ></ tr >
< tr >< td >< code > typedef copy_if< Sequence,T,Op,Pred> ::type s;</ code ></ td >< td > A type</ td >< td ></ td >< td > Equivalent to < code > typedef lambda< Op> ::type op; typedef lambda< Pred> ::type pred; typedef fold< Sequence,T,if_< apply< pred,_2> , apply< op,_1,_2> , _1 > > ::type s;</ code > .</ td >< td ></ td ></ tr >
</ table >
< p >
< h3 > Complexity</ h3 >
< p >
Linear. Exactly < code >< a href = "../Reference/size.html" > size</ a > < Sequence> ::type::value</ code > applications of < code > Pred</ code > , and at most < code >< a href = "../Reference/size.html" > size</ a > < Sequence> ::type::value</ code > applications of < code > BinaryOp</ code > .
< p >
< h3 > Example</ h3 >
< p >
< pre >
typedef < a href = "../Reference/list_c.html" > list_c</ a > < int,0,1,2,3,4,5,6,7,8,9> ::type numbers;
typedef < a href = "../Reference/list_c.html" > list_c</ a > < int,0,1,2,3,4> ::type answer;
typedef copy_if<
numbers
, < a href = "../Reference/vector_c.html" > vector_c</ a > < int>
2003-03-12 13:29:12 +00:00
, < a href = "../Reference/push_back.html" > push_back</ a > < _1,_2>
, < a href = "../Reference/less.html" > less</ a > < _1,int_< 5> >
2002-09-16 19:25:33 +00:00
> ::type result;
< p >
BOOST_STATIC_ASSERT(< a href = "../Reference/size.html" > size</ a > < result> ::value == 5);
BOOST_STATIC_ASSERT((< a href = "../Reference/equal.html" > equal</ a > < result,answer> ::type::value));
</ pre >
< p >
< h3 > See also</ h3 >
< p >
< a href = "../Algorithms.html" > Algorithms</ a > , < code >< a href = "../Reference/copy.html" > copy</ a ></ code > , < code >< a href = "../Reference/copy_backward_if.html" > copy_backward_if</ a ></ code > , < code >< a href = "../Reference/copy_backward.html" > copy_backward</ a ></ code > , < code >< a href = "../Reference/fold.html" > fold</ a ></ code > , < code >< a href = "../Reference/iter_fold.html" > iter_fold</ a ></ code >
< p >< hr >
2003-03-12 13:29:12 +00:00
< a href = "../Table_of_Contents.html" > Table of Contents</ a >< br > Last edited March 12, 2003 6:30 am</ body ></ html >