BOOST_FOREACH

boost1.34.1から加わったBOOST_FOREACH

std::for_eachよりも自然に記述できて大変便利なのでstdafx.hに

#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH

として愛用中。

で、stlのmapをforeachでまわそうとして

using namespace std;
map<string,int> Map;
Map.insert( pair<string,int>("XBOX360", 256) );
Map.insert( pair<string,int>("PS3", 512) );
Map.insert( pair<string,int>("DreamCast", 1024) );
foreach (pair<string,int> p, Map) {
    printf("%sの戦闘力は%d!", p.first, p.second);
}

とかするとコンパイルエラーに

調べてみるとBOOST_FOREACHはマクロだからうんたらかんたら
http://miyano.s53.xrea.com/cgi-bin/sb/

なるほど、なるほど。

pair<string,int> p;
foreach (p, Map) {
    printf("%sの戦闘力は%d\n", p.first, p.second);
}

とするか

typedef pair<string,int> P;
foreach (P p, Map) {
    printf("%sの戦闘力は%d!", p.first, p.second);
}

としないと駄目だったんだ。