Linked by Eugenia Loli on Mon 1st Aug 2005 00:05 UTC
General Development Don't be jealous of programmers using new languages, such as Python or C#! C++ gives you many ways to iterate through data you've stored in containers, supports for-each, and has helpful devices called lambda functions. Jeff Cogswell shows you how you can fly through your containers with ease.
Thread beginning with comment 12101
To read all comments associated with this story, please click here.
BOOST_FOREACH
by eric_niebler on Mon 1st Aug 2005 16:03 UTC
eric_niebler
Member since:
2005-06-29

A foreach looping macro was recently accepted into Boost ( http://boost.org ). It works with STL containers, arrays, and iterator ranges, and it doesn't require the compiler to support typeof or auto, so it works on older compilers. It even allows you to mutate the sequence in place:

int array[] = {1,2,3,4};
BOOST_FOREACH(int & i, array)
{
++i;
}
// array is now {2,3,4,5}

The docs are at http://boost-sandbox.sf.net/libs/foreach .

You can download the code (foreach.zip) at http://boost-sandbox.sf.net/vault/index.php?directory=eric_niebler .

The code requires Boost 1.32.

--
Eric Niebler
Boost Consulting
http://www.boost-consulting.com

Reply Score: 1

RE: BOOST_FOREACH
by falemagn on Mon 1st Aug 2005 16:31 in reply to "BOOST_FOREACH"
falemagn Member since:
2005-07-06

> and it doesn't require the compiler to support typeof
> or auto, so it works on older compilers. It even allows
> you to mutate the sequence in place:

Well, looking at the code you pasted it avoids using a the typeof or the auto keywords because it requires you to write the type of the iterator explicitely. This means that BOOST's foreach isn't polymorphic per se. You must admit my implementation is nicer ;)

Reply Parent Score: 1

RE[2]: BOOST_FOREACH
by falemagn on Mon 1st Aug 2005 16:45 in reply to "RE: BOOST_FOREACH"
falemagn Member since:
2005-07-06

Looking at the code of BOOST's foreach, I see it has a lot of code before the real for loop, which makes it impossible to use BOOST_FOREACH the same way you would use for(), forcing you to wrap it up between braces, in some circumstances.

It's also true that my implementation has the pitfall that it may evaluate the arguments more than once, though. Well, to solve these issues c++ should let the user define her own keywords... perhaps one day ;)

Reply Parent Score: 1

RE[2]: BOOST_FOREACH
by eric_niebler on Mon 1st Aug 2005 18:31 in reply to "RE: BOOST_FOREACH"
eric_niebler Member since:
2005-06-29

You are mistaken. BOOST_FOREACH does not make you write the type of the iterator. You only have to specify the element type. This is how the foreach keyword works in C#, and how it will most likely work in C++0x.

Reply Parent Score: 1