
On Sun, Dec 13, 2009 at 11:51 PM, Eric Niebler
The Dude wrote:
Hello,
Boost::foreach is very useful for iterating over a sequence and doing something that depends only on the iterated element, e.g., <code> BOOST_FOREACH(const Foo &f, foos) cout << f.bar() << endl; </code>
However, I often need to iterate over a sequence and do some operation that depends on both the iterated element and the iteration index. E.g., I would like something like <code> BOOST_FOREACH(size_t i, const Foo &f, foos) cout << "The bar of element " << i << " is " << f.bar() << endl; </code>
Is there an easy way to do so?
Why not:
int index = 0;
BOOST_FOREACH(const Foo &f, foos) { // ... stuff ... ++index; }
?
-- Eric Niebler BoostPro Computing http://www.boostpro.com
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Hello, Thanks for you answer. I'm not sure how to answer the "why not"? The code you write certainly will work, but so would the predecessor to BOOST_FOREACH in the first place, no? So here's my attempt: 1. For shorter loops, this changes 2 LOCs to 5. 2. For longer loops, the iteration code changes its meaning if it appears before the ++index or after. 3. The variable index has scope outside the loop. 4. Other people think so, e.g., the author's of D language http://en.wikipedia.org/wiki/D_(programming_language)#Example_1 It's true that none of these points is really a proof. Still, I'd be really happy to hack my own INDEX_FOREACH, but the 500+ LOCs of BOOST_FOREACH left me daunted. Thanks & Bye, TD