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! ]