.NODE

Filtering Values Outside a Given Range

Problem

You want to ignore values from a sequence that fall above or below a given range.

Solution

Use the remove_copy_if function found in the , as shown in Example 11-8.

Example 11-8. Removing elements from a sequence below a value

#include 
#include 
#include 
#include 

using namespace std;

struct OutOfRange
{
 OutOfRange(int min, int max)
 : min_(min), max_(max)
 { }
 bool operator( )(int x) {
 return (x < min_) || (x > max_);
 }
 int min_;
 int max_;
};

int main( )
{
 vector v;
 v.push_back(6);
 v.push_back(12);
 v.push_back(18);
 v.push_back(24);
 v.push_back(30);
 remove_copy_if(v.begin( ), v.end( ),
 ostream_iterator(cout, "
"), OutOfRange(10,25));
}

The program in Example 11-8 produces the following output:

12
18
24

 

Discussion

The remove_copy_if function copies the elements from one container to another container (or output iterator), ignoring any elements that satisfy a predicate that you provide (it probably would have been more accurate if the function was named copy_ignore_if). The function, however, does not change the size of the target container. If, as is often the case, the number of elements copied by remove_copy_if is fewer than the size of the target container, you will have to shrink the target container by calling the erase member function.

The function remove_copy_if requires a unary predicate (a functor that takes one argument and returns a boolean value) that returns true when an element should not be copied. In Example 11-8 the predicate is the function object OutOfRange. The OutOfRange constructor takes a lower and upper range, and overloads operator( ). The operator( ) function takes an integer parameter, and returns true if the passed argument is less than the lower limit, or greater than the upper limit.

Building C++ Applications

Code Organization

Numbers

Strings and Text

Dates and Times

Managing Data with Containers

Algorithms

Classes

Exceptions and Safety

Streams and Files

Science and Mathematics

Multithreading

Internationalization

XML

Miscellaneous

Index

show all menu





C++ Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2006
Pages: 241
Similar book on Amazon

Flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net