Hmm  I happen to use the idea of replacing begin with rbegin and iterators with reverse_iterator, etc Doing this I wrote a simple test file to compare performance. To my surprise doing std::reverse(v.begin(), v.end()) and than using BOOST_FOREACH is actually faster than a hard brute force method of BOOST_FOREACH_REV.


Test ran with mingw compiler 3.4.5

Heres the code.
#include <vector>
#include <iostream>
#include <algorithm>
#include <boost/timer.hpp>
#include <boost/foreach.hpp>
#include <boost/format.hpp>

int main()
{
       const long TOTAL_ELEMENT = 10000;
       std::cout << boost::format("%f\t%f\n") % "BOOST_FOREACH" % "BOOST_FOREACH_REV";
       boost::timer t;
       std::vector<int> vec_int;
       for (int j = 1; j < 50; ++j)
     {
       vec_int.reserve(TOTAL_ELEMENT*j);
       double t1, t2;
       for (int i = 0; i < TOTAL_ELEMENT*j; ++i)
       {
           vec_int.push_back(i);
       }
       t.restart();
       std::reverse(vec_int.begin(), vec_int.end());
       BOOST_FOREACH(int& i, vec_int)
       {
             i -= 1;
       }
       t1 = t.elapsed();
       t.restart();
       BOOST_FOREACH_REV(int& i, vec_int)
       {
             i -= 1;
       }
       t2 = t.elapsed();
       std::cout << boost::format("%f\t%f\n") % t1 % t2;
    }
}

/*
BOOST_FOREACH    BOOST_FOREACH_REV
0.001000    0.001000
0.002000    0.003000
0.002000    0.005000
0.004000    0.005000
0.005000    0.006000
0.003000    0.009000
0.010000    0.008000
0.008000    0.010000
0.008000    0.010000
0.008000    0.014000
0.009000    0.016000
0.016000    0.014000
0.010000    0.019000
0.011000    0.017000
0.013000    0.017000
0.013000    0.018000
0.014000    0.022000
0.016000    0.020000
0.016000    0.021000
0.017000    0.023000
0.017000    0.025000
0.018000    0.031000
0.018000    0.026000
0.020000    0.034000
0.019000    0.030000
0.022000     0.037000
0.021000    0.033000
0.024000    0.032000
0.023000    0.039000
0.025000    0.033000
0.026000    0.039000
0.026000    0.046000
0.029000    0.040000
0.028000    0.039000
0.030000    0.042000
0.030000    0.051000
0.032000    0.051000
0.035000    0.059000
0.035000    0.054000
0.033000    0.055000
0.035000    0.059000
0.035000    0.119000
0.035000    0.062000
0.037000    0.059000
0.037000     0.057000
0.037000    0.063000
0.072000    0.061000
0.039000    0.062000
0.039000    0.060000
*/

On 8/6/07, chun ping wang < cablepuff@gmail.com> wrote:
HI, yeah i wanted to do reverse iteration lookup so I took liberty to edit the file of foreach.hpp. Its ugly but it "works". I haven't done any detail testing.

I only test it on basic string.. so i am sure of that.


On 7/1/07, Pete Bartlett < pete@pcbartlett.com> wrote:

>You're not the first to want a REVERSE_FOREACH, but this is the first
>legitimate argument I've heard for it. Could you go to
> http://svn.boost.org/trac and open a new ticket there. Make the ticket
>type "feature request" and the component "foreach". I'll look into it
>when I have a chance.

Thanks very much for your interest, Eric.
I've set up a ticket on the issue which you can view at

http://svn.boost.org/trac/boost/ticket/1071

Pete Bartlett



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users