Re: some combination of std::distance/std::max_element ( ? )
In article <1146012060.686157.99180@e56g2000cwe.googlegroups.com>,
ma740988 <ma740988@gmail.com> wrote:
Given a sequence with n elements. For instance:
double arr [ 6 ] = { 0., 2., 4., 5., 6., 7.}
I'll define - what I call 'test zones' . Within these test zones I'll
seach for _and_ store max values and position found.
For instance: Lets assume 2 test zones. This would equate to:
Zone 1 elements: 0., 2., 4
Zone 2 elements: 5., 6., 7
Max value - zone 1 = 4, location 2 ( element index)
Max value - zone 2 = 7, location 5 ( element index)
The code:
template <class For1,class For2 ,class Out>
Out max_of_zones(For1 data_begin,For1 data_end,
For2 z_begin,For2 z_end, Out out)
{
// beginning and end of current range
For1 begin = data_begin;
For2 end(begin)
for(;z_begin!=z_end; begin=end, ++out, ++z_begin)
{
std::advance(end,*z_begin);
*out = *std::max_element(begin,end);
}
return out;
}
Where For1 and For2 are forward iterators [faster if For1 is
actually a random access iterator] and Out is an output iterator.
and For1::value_type has an operator < .
This will work with any STL sequence containers.
std::vector<int> sizes{3,3};
std::vector<double> data;
// place the six values in data.
std::vector<double> max_of_zone;
max_zones(data.begin(),data.end(),sizes.begin(),sizes.end(),
std::ostream_iterator<double>(std::cout,",'));
will print the max's as a comma separated list.
Isn't that shorter and easier to read??
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]